Pet*_*own 7 session ruby-on-rails omniauth ruby-on-rails-4
我在使用OmniAuth和Rails 4.0.0.beta1时遇到问题,其中SessionsController中设置的会话值没有在重定向中保留.我试图弄清楚它是否在我的代码中,Rails 4中的错误,或与OmniAuth gem不兼容.我正在使用OmniAuth开发人员策略.
我不确定这是否意味着什么,但如果我在行SessionsController#create之后放入一个调试器session[:user_id] = user.id并检查类会话对象,我得到:
ActionController::RequestForgeryProtection::ProtectionMethods::NullSession::NullSessionHash
Run Code Online (Sandbox Code Playgroud)
但是,如果我在运行Rails 3.2的不同应用程序中检查相同的会话类,我会得到:
Hash
Run Code Online (Sandbox Code Playgroud)
也许OmniAuth无法正确处理NullSessionHash对象?
sessions_controller
class SessionsController < ApplicationController
skip_before_filter :authenticate_user!
def create
user = User.find_or_create_by_auth_hash(auth_hash)
session[:user_id] = user.id
redirect_to root_path
end
protected
def auth_hash
request.env['omniauth.auth']
end
end
Run Code Online (Sandbox Code Playgroud)
配置/初始化/ secret_token.rb
MyApp::Application.config.secret_key_base = 'REMOVED'
Run Code Online (Sandbox Code Playgroud)
配置/初始化/ session_store.rb
MyApp::Application.config.session_store :encrypted_cookie_store, key: '_my_app_session'
Run Code Online (Sandbox Code Playgroud)
事实证明,这与Rails 4和使用omniauth gem开发人员策略之间的问题有关.我在https://github.com/intridea/omniauth/pull/674修复了它
更新
由于PR没有合并,我想我会发布一个似乎适用于大多数人的简单解决方案.问题是开发人员策略不包括表单真实性令牌,Rails默认需要该令牌.您可以使用以下命令在会话控制器中禁用此功能:
class SessionsController < ApplicationController
skip_before_filter :verify_authenticity_token
# ...
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1164 次 |
| 最近记录: |