我的设置:
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
记录的属性。