我正在使用 devise 进行 rails api 身份验证,但无法正确理解 devise 的 sign_in 正在为我们做什么。
我有用于登录用户的带有创建方法的 session Controller 。
def create
user_email = params[:session][:email]
user_password = params[:session][:password]
user = user_email.present? && User.find_by(email: user_email)
if user.valid_password?(user_password)
sign_in user, store: false /* exactly this line */
render json: user, status: 200, location: [:api, user]
else
render json: { errors: "Invalid email or password" }, status: 422
end
end
在 rubydoc 上,它的描述是这样写的
Sign in a user that already was authenticated. This helper is useful for logging users in after sign up. All options given to sign_in is passed forward to the set_user method in warden.
但我不清楚。谢谢。
最佳答案
sign_in
适用于当您已经拥有 User
时您自己创建或加载/验证的对象,因此希望在 session 中存储为当前和即将到来的请求的其余部分的经过验证的用户。
如果您查看 source code for the default Devise SessionsController
你会看到它也使用了sign_in
登录用户。
设计是 warden 上的一层, 所以你可能想看看它的 documentation了解此级别的功能。正如您引用的设计文档所述,sign_in
只需调用set_user
典狱长的方法。 Devise 在顶部添加了很多便利,例如使用多个范围和各种 jail 长身份验证策略的能力。
关于ruby-on-rails - devise的sign_in是做什么的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44746982/