Sjo*_*ost 7 authlogic ruby-on-rails-3
我正在尝试使用auth_logic构建一个"只需点击你的名字登录"系统.我的用户模型有一个电子邮件和名称字段.要登录,我只需:
UserSession.create(@user, true)
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不会导致会话被创建.使用调试器我发现此消息:
#<UserSession: {:unauthorized_record=>"<protected>"}>
Run Code Online (Sandbox Code Playgroud)
我的用户模型只有一行:
acts_as_authentic
Run Code Online (Sandbox Code Playgroud)
用户会话行有这个,我在某处找到了.我不知道它做了什么,我尝试过和没有:
class UserSession < Authlogic::Session::Base
def to_key
new_record? ? nil : [ self.send(self.class.primary_key) ]
end
end
Run Code Online (Sandbox Code Playgroud)
数据库(我也不确定是否需要user_sessions表):
create_table "sessions", :force => true do |t|
t.string "session_id", :null => false
t.text "data"
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "sessions", ["session_id"], :name => "index_sessions_on_session_id"
add_index "sessions", ["updated_at"], :name => "index_sessions_on_updated_at"
create_table "user_sessions", :force => true do |t|
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "users", :force => true do |t|
t.datetime "created_at"
t.datetime "updated_at"
t.string "persistence_token"
t.string "email"
t.string "name"
end
Run Code Online (Sandbox Code Playgroud)
我正在使用Rails 3.0.9和我的Gemfile说(我尝试了普通和Github authlogic gem):
gem 'rails', '3.0.9'
gem 'sqlite3'
gem "authlogic" #, :git => 'git://github.com/odorcicd/authlogic.git', :branch => 'rails3'
Run Code Online (Sandbox Code Playgroud)
这是源代码的其余部分.
几天前我在一个类似的项目上遇到了这个问题,它在某个时刻"刚刚离开".我只是不记得怎么样.
有任何想法吗?这让我疯狂......
可能的解决方案...看起来这些辅助方法示例有两个版本。有一个我们用过的:
@current_user = current_user_session && current_user_session.user
Run Code Online (Sandbox Code Playgroud)
然后是一些较新的教程和示例中的较新版本:
@current_user = current_user_session && current_user_session.record
Run Code Online (Sandbox Code Playgroud)
显然,当在会话对象上调用 .user (或任何登录字段)时,它返回 unauthorized_record,而 .record.user 返回适当的数据。