#<UserSession:{:unauthorized_record =>"<protected>"}>

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)

是源代码的其余部分.

几天前我在一个类似的项目上遇到了这个问题,它在某个时刻"刚刚离开".我只是不记得怎么样.

有任何想法吗?这让我疯狂......

jor*_*npg 2

可能的解决方案...看起来这些辅助方法示例有两个版本。有一个我们用过的:

@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 返回适当的数据。