[英]Rails 4 Devise Omniauth with multiple providers tied to model associated with user
[英]how to deal with multiple devise model for omniauth in ruby on rails
我有 3 类用户(学生、教师和管理员)。 学生将记录他们的学习,教师将监督学生,管理员将管理服务。 所以我为所有用户制作了一个设计宝石。 实际上,我的目的是让每个用户都可以使用 facebook 或 twitter 登录,但我不能这样做,因为设计中的 omniauthable 仅支持一种设计模型......如何处理 omniauth 的多个设计模型,例如
<%= link_to 'student login with facebook', ........ %>
<%= link_to 'teacher login with facebook', ........ %>
我使用 omniauth 解决了一个模型的问题。 对于另一个模型,我设置了相同的 omniauth_login 按钮和一个参数,比如 student: true,在我的例子中:
<%= link_to user_google_oauth2_omniauth_authorize_path(doctor: true) do %>
<i class="fab fa-google"></i>
<div>Continua con Google</div>
<% end %>
然后在我的 omniauth 回调控制器上
def google_oauth2
set_user
if @user.persisted?
sign_in_and_redirect @user, event: :authentication
else
# Removing extra as it can overflow some session stores
session['devise.google_data'] = request.env['omniauth.auth'].except(:extra)
redirect_to new_user_registration_url, alert:
@user.errors.full_messages.join("\n")
end
end
def set_user
@user = if request.env['omniauth.params']['doctor']
Doctor.from_omniauth(request.env['omniauth.auth'])
else
User.from_omniauth(request.env['omniauth.auth'])
end
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.