AuthlogiC语言 如何检查用户是否已注销



我的设置:

user.rb

  acts_as_authentic do |c|
    c.logged_in_timeout(1.minutes)
  end

user_session.rb

  def to_key
    new_record? ? nil : [ self.send(self.class.primary_key) ]
  end
  self.logout_on_timeout = true

application_controller.rb

  helper_method :current_user_session, :current_user
  private
    def current_user_session
      logger.debug "ApplicationController::current_user_session"
      return @current_user_session if defined?(@current_user_session)
      @current_user_session = UserSession.find
    end
    def current_user
      logger.debug "ApplicationController::current_user"
      return @current_user if defined?(@current_user)
      @current_user = current_user_session && current_user_session.user
    end
    def require_user
      logger.debug "ApplicationController::require_user"
      unless current_user
        #store_location
        flash[:warning] = "You must be logged in to access this page"
        #redirect_to new_user_session_url
        redirect_to root_url
        return false
      end
    end
    def require_no_user
      logger.debug "ApplicationController::require_no_user"
      if current_user
        #store_location
        flash[:warning] = "You must be logged out to access this page"
        redirect_to account_url
        return false
      end
    end

但是当我加载页面时,会出现错误

undefined method `logged_out?' for #<User:0x00000103ee8348>

我试着阅读官方GitHub页面的Authlogic,但我仍然不知道,我错过了什么…谁能给我点建议修理它?

提前感谢!

我遇到了完全相同的问题,它归结为我的User模型中没有所有必要的列。

我最初的用户模型(来自db/schema.rb)是非常简约的:

create_table "users", :force => true do |t|
    t.string   "username"
    t.string   "name"
    t.string   "crypted_password"
    t.string   "password_salt"
    t.string   "persistence_token"
    t.string   "perm",               :default => "employee"
end

但是,我将列t.datetime :last_requested_at添加到我的模型中,以及一些可能需要也可能不需要的其他列。最终的User模型如下:

create_table "users", :force => true do |t|
    t.string   "username"
    t.string   "name"
    t.string   "crypted_password"
    t.string   "password_salt"
    t.string   "persistence_token"
    t.string   "perm",               :default => "employee"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.integer  "login_count",        :default => 0,          :null => false
    t.integer  "failed_login_count", :default => 0,          :null => false
    t.datetime "last_request_at"
    t.datetime "current_login_at"
    t.datetime "last_login_at"
    t.string   "current_login_ip"
    t.string   "last_login_ip"
end

在添加其他列后,我不再得到undefined method 'logged_out?'...错误。

祝你好运!

(参考/更多信息:http://www.michaelhamrah.com/blog/2009/05/authlogic-and-openid-on-rails/——在logged_out?页面搜索,解释是大约3/4的方式下来的帖子)

如果您想知道用户是否已注销,您可以这样做:

if current_user_session
  ...

如果用户登录(有一个会话),该条件将返回true,如果用户注销(会话是nil),则返回false

对于错误消息,undefined method 'logged_out?' for #<User:0x00000103ee8348>意味着您还没有定义一个名为logged_out?的方法,因此它不知道您的意思。

Authlogic没有为User模型定义logged_out?方法,您也没有,因此没有什么可调用的。原因是"登录"或"注销"的状态与User模型没有任何关系,而是给定用户是否具有活动的UserSession记录的属性。

相关内容

  • 没有找到相关文章

最新更新