Robisz to, przekazując dodatkowy parametr i wybierając opcję del, które chcesz uwierzytelnić na podstawie tego parametru. Jest to podobne do odpowiedzi gdonato, ale zakresy w odźwiernym są lepiej wykorzystywane do zarządzania uprawnieniami nadawanymi uwierzytelnionej aplikacji (np. "Daj tej aplikacji uprawnienia do czytania X i pisania w twoim imieniu").
Oto co używam
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
Zauważ, że jeśli były to zrobić przy użyciu zakresów zamiast param że odźwierny nie jest już używana do czegoś innego, będziesz musiał skonfigurować zakresy jak:
# 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
Korzystanie zakres jako param do rozróżnienia pomiędzy użytkownikiem a administrator może działać bez jiggering default_scopes lub optional_scopes w doorkeeper.rb, ale tylko jako efekt uboczny w scopingu że odźwierny spodziewa.
DZIĘKUJEMY! Zrezygnowałem z tego dawno temu, ale dzisiaj musiałem ukończyć projekt. Wróciłem tutaj, chcąc ponownie opublikować to pytanie i znalazłem odpowiedź. Właśnie tego szukałem. DZIĘKUJĘ CI! –