设计如何添加登录自定义会话控制器?

时间:2012-03-23 18:57:35

标签: ruby-on-rails-3 devise

我正在尝试使用Devise的控制器辅助方法signed_in?检查用户是否已签名_in,如果是,则我想重定向到特定页面。

我试过这个,但是signed_in?方法总是返回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

2 个答案:

答案 0 :(得分:0)

你想让它住在帮手里。

当用户登录时,将用户保存为current_user

self.current_user = user

要检查用户是否已登录,您可以使用

def signed_in?
  !current_user.nil?
end

来自Michael Hartl http://ruby.railstutorial.org/chapters/sign-in-sign-out#sec:current_user

编辑:

抱歉,我刚看完编辑。你想要Devise的。

def'igned_in怎么样?'看起来像?

对于第一个实现,我建议您自己动手以更好地理解,并让您知道所有组件的快速定制位置。接下来你可以实现其他方法。

答案 1 :(得分:0)

您是否尝试过if user_signed_in?

现在,我真的不确定你要完成什么,但我不会在控制器中定义我的路由。我会做这样的事情:

# config/routes.rb
authenticated :user do
  root :to => where_I_want_to_url
end
root :to => 'welcome#index'