yer*_*syl 10 ruby-on-rails ruby-on-rails-4
我想在任何控制器操作之前执行一些函数来检查用户是否已登录.我正在使用设计以便我可以使用is_signed_in ?,但我必须将if else条件放入控制器中的每个方法.
我想要的是这样的东西:
#some_controller.rb
before_action :is_signed_in?
def is_signed_in?
if !user_signed_in?
redirect_to new_user_session_path
else
..proceed to the action intended to call
end
endRun Code Online (Sandbox Code Playgroud)
Flo*_*rry 19
Devise附带了一些有用的内置助手.
在你的情况下,你感兴趣的是authenticate_user!.在Devise文档中查看控制器过滤器和帮助程序.
您可以使用此方法过滤控制器中的操作,以确保只有登录用户可以处理控制器中的给定操作或所有操作,否则如果用户未登录,则会重定向到登录页面.
before_action :authenticate_user!
before_action :authenticate_user!, only: [:show]
Run Code Online (Sandbox Code Playgroud)
您还可以创建自己的帮助方法.
在你的users_controller.rb,创建一个before_action过滤器
class UsersController < ApplicationController
before_action :logged_in_user
...
end
Run Code Online (Sandbox Code Playgroud)
在你的 session_helper.rb
module SessionHelper
# Returns true if the user is logged in, false otherwise.
def logged_in?
!current_user.nil?
end
# Confirms a logged-in user.
def logged_in_user
unless logged_in?
flash[:danger] = "Please log in."
redirect_to login_url
end
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22004 次 |
| 最近记录: |