Ruby on rails 3 设计如何在自定义会话控制器中添加登录签入?
我正在尝试使用Desive的控制器助手方法登录?要检查用户是否已登录,如果是,则我要重定向到特定页面 我已经试过了,但是你签了吗?方法总是返回true,我如何才能使其工作Ruby on rails 3 设计如何在自定义会话控制器中添加登录签入?,ruby-on-rails-3,devise,Ruby On Rails 3,Devise,我正在尝试使用Desive的控制器助手方法登录?要检查用户是否已登录,如果是,则我要重定向到特定页面 我已经试过了,但是你签了吗?方法总是返回true,我如何才能使其工作 class SessionsController < Devise::SessionsController def new redirect_to root_url end def create if signed_in?(resource_name) redirect_to
class SessionsController < Devise::SessionsController
def new
redirect_to root_url
end
def create
if signed_in?(resource_name)
redirect_to where_-_want_to_url
else
resource = warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#failure")
return sign_in_and_redirect(resource_name, resource)
end
end
def sign_in_and_redirect(resource_or_scope, resource=nil)
scope = Devise::Mapping.find_scope!(resource_or_scope)
resource ||= resource_or_scope
sign_in(scope, resource) unless warden.user(scope) == resource
return render :json => {:success => true, :redirect => stored_location_for(scope) || after_sign_in_path_for(resource)}
end
def failure
return render :json => { :success => false }
end
end
class sessioncontrollerresource_name,:recall=>“#{controller_path}#failure”)
返回签名和重定向(资源名称、资源)
结束
结束
def sign_in_和_重定向(资源_或_作用域,资源=nil)
范围=设计::映射。查找范围!(资源或范围)
资源| |=资源|或|范围
除非管理员用户(范围)=资源,否则登录(范围,资源)
返回render:json=>{:success=>true,:redirect=>stored_location_for(scope)| after_sign_in_path_for(resource)}
结束
def故障
返回render:json=>{:success=>false}
结束
结束
您希望它生活在助手中
当用户登录时,将该用户另存为当前用户
self.current_user = user
要检查用户是否已登录,可以使用
def signed_in?
!current_user.nil?
end
迈克尔·哈特尔
编辑:
对不起,我刚看了编辑。你想要迪安的
def“已登录”的外观如何
对于第一个实现,我建议您自己滚动,以便更好地理解,并让您知道所有组件在哪里进行快速定制。下一卷您可以实现其他人的方法。如果用户登录,您是否尝试过
现在,我真的不确定您想要完成什么,但我不会在控制器中这样定义我的路由。我会这样做:
# config/routes.rb
authenticated :user do
root :to => where_I_want_to_url
end
root :to => 'welcome#index'
你想用这个做什么?您是否只想根据用户是否登录显示不同的主页?不,存在登录页面已显示但用户已登录的情况。所以我想做服装重定向