Si esegue questa operazione passando un parametro aggiuntivo e scegliendo il mo vuoi che si autentifichino in base a quel parametro. Questo è simile alla risposta di gdonato, ma gli scope in doorkeeper sono meglio usati per gestire quali permessi vengono dati all'app autenticata (ad esempio "Autorizza questa app a leggere X e scrivere Y per tuo conto").
Ecco quello che sto usando
resource_owner_from_credentials do |routes|
if params[:user_type].present?
case params[:user_type]
when 'user'
u = User.find_for_database_authentication(email: params[:email])
when 'employer'
u = Employer.find_for_database_authentication(email: params[:email])
when 'admin'
u = Administrator.find_for_database_authentication(email: params[:email])
end
end # I don't want a default auth user_type, so no 'else' block for me
user if user && user.valid_password?(params[:password])
end
Si noti che se si dovesse fare questo usando gli ambiti invece di un param che portinaio non sta già utilizzando per qualcos'altro, dovrete configurare gli ambiti come:
# These are found in doorkeeper.rb, but they're commented by default.
# You would use whatever scopes you're wanting to check
default_scopes :public
optional_scopes :write, :update
Usando portata come param di distinguere tra utente e amministratore potrebbe funzionare senza jiggering default_scopes o optional_scopes in doorkeeper.rb, ma solo come un effetto collaterale della scoping che portinaio si aspetta.
GRAZIE! Ho rinunciato a questo molto tempo fa ma oggi ho dovuto completare il progetto. Sono tornato qui con l'intenzione di pubblicare nuovamente questa domanda e ho trovato la tua risposta. Era esattamente quello che stavo cercando. GRAZIE! –