我的应用程序中有 2 个不同的控制器应该访问同一个会话对象。目前我正在使用:active_record_store
,因为我不想使用数据库来获取我的用户。
我正在做这样的事情:
api 控制器获取用户电子邮件并创建用户对象(有效?、哈希和其他方法)
class ApiController < ApplicationController
def login
user = Requester.validate_email params[:email]
if user.valid?
session[:current_user] = user # works
current_user = user # dont work
redirect_to app_root_path
else
redirect_to app_signup_path
end
end
end
家庭控制器将向用户显示一些页面,因为他已经“登录”了
class PagesController < ApplicationController
def home
puts "Home"
# Everything here works fine
puts session[:current_user].hash
puts session[:current_user]
puts session[:current_user].nil?
# Nothing here works
puts current_user.hash
puts current_user
puts current_user.nil?
end
end
和current_user
方法current_user=
位于ApplicationController
:
class ApplicationController < ActionController::Base
protect_from_forgery
private
def current_user
session[:user]
end
def current_user=(user)
session[:user] = user
end
end
我究竟做错了什么?为什么我不能session[:user]
从私有方法内部访问?
在开发中使用 rails 3.2.11 和 sqlite3,在生产中使用 postgresql
编辑
我发现我的问题,显然我不能使用current_user = <some object>
,如果我使用,current_user(<some object>)
那么这将工作。
def current_user(user)
session[:user] = user
end
def current_user=(user)
session[:user] = user
end
def current_user
session[:user]
end