我的项目目前使用has_secure_password
来处理用户(类似于此railscast)。一切正常,但往下看,我觉得切换到Auth0会带来好处,并希望在太多用户注册之前立即进行转换。
用户被保存到具有多个关联的用户模型(签入/注释等)。如何将Auth0用户链接到数据库上的用户记录。我想我可以通过电子邮件(因为它们将是唯一的)或Auth0用户ID(并在用户表中添加新列)进行登录。看起来我可以简单地使用Auth0登录回调来签署用户(使用我当前的会话控制器)但是如何在OmniAuth中创建用户时在数据库上创建用户。这也有回调吗?
在一个完美的世界里,我想做一些像:
我想要的是什么?或者我应该坚持我目前的身份验证?
答案 0 :(得分:3)
实施Auth0授权与任何其他OAuth提供商(如Facebook,Twitter,Github等)之间没有重大区别。Auth0 quickstart guide有点奇怪,因为它没有显示如何将凭据链接到用户应用程序中的模型。相反,他们只是把整个shebang推到了会议中。
您需要对此用户模型进行唯一真正的更改是添加uid
列,该列用于为用户存储Auth0 uid
。
基本上,OmniAuth的OAuth流程如下:
callback
或failure
方法。uid
或在auth哈希中创建新用户来查找应用程序中的用户。class Auth0Controller < ActionController::Base
# the signed up or logged in on auth0
# GET "/auth/auth0/callback"
def callback
auth_hash = request.env['omniauth.auth']
@user = User.find_or_intialize_by(uid: auth_hash[:uid])
if @user.new_record?
@user.name = auth_hash.name
@user.email = auth_hash.email # etc
@user.save!
end
reset_session
session[:user_id] = @user.id
redirect_to root_path, success: "Hello #{@user.name}"
end
# the user declined to give your app permissions
# GET "/auth/failure"
def failure
redirect_to root_path, alert: "Oh noes"
end
end
请参阅: