Ruby on rails 3 设计如何在自定义会话控制器中添加登录签入?

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

我正在尝试使用Desive的控制器助手方法登录?要检查用户是否已登录,如果是,则我要重定向到特定页面

我已经试过了,但是你签了吗?方法总是返回true,我如何才能使其工作

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'

你想用这个做什么?您是否只想根据用户是否登录显示不同的主页?不,存在登录页面已显示但用户已登录的情况。所以我想做服装重定向