利用 devise的sign_in 方法登录已认证的用户如果你的程序已经完成了登录模块,那么在不使用 devise 提供的登录模块的基础上,你依旧可以使用 devise 来记录当前用户。devise 提供了 SignInOut 模块,我们可以通过调用其中的方法来直接进行用户的登录和登出。使用 sign_in 登录用户后,我们就可以用 current_user 来获取当前登录的用户。
# sign_in(resource_or_scope, *args) ⇒ Object
该方法是用来登录一个已经通过验证的方法。一般情况下,我们会在用户注册之后调用该方法,来进行注册用户的首次登录。所有给 sign_in 的选项都将传递给 warden 的 set_user 方法。
sign_in :user, @user # sign_in(scope, resource)
1
| sign_in @user # sign_in(resource)
|
sign_in @user, event: :authentication # sign_in(resource, options)
sign_in @user, store: false # sign_in(resource, options)
#sign_out(resource_or_scope = nil) ⇒ Object
该方法是用来登出指定用户或范围。一般情况下,我们会在删除用户之后调用该方法,用来登出被删除的用户。如果成功登出,会返回 true。如果在指定范围没有该用户,则登出失败,会返回 false。
sign_out :user # sign_out(scope)
sign_out @user # sign_out(resource)
判断用户是否登录我们可以在 controller 中判断用户是否登录,devise 提供了相当简便的方法,我们只需要在 controller 的 before_action 中添加 authenticate_user! 即可。
清单10. 判断用户是否登录1
| class PapersController < ApplicationController
|
before_action :authenticate_user!
before_action :set_paper, only: [:show, :edit, :update, :destroy]
def index
@papers = Paper.all
end
……
end
现在我们再访问 /papers,controller 就会先判断我们是否已经登录,未登录的话就会转到登录界面,需要登录才能访问资源。
图4. 未登录访问资源 |