繁体   English   中英

Rails 4 - 设计不绑定会话

[英]Rails 4 - Devise not binding session

我最近将我的应用程序升级到Rails 4.我一直在使用omniauth上的自定义openid端口对用户进行身份验证。

控制器(Omniauth回调)

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
  def openid
    @user = User.where(provider: auth_hash["provider"], uid: auth_hash["uid"]).first_or_initialize
    @user.name = auth_hash["information"]["name"]
    @user.email = auth_hash["information"]["email"]
    @user.save!
    sign_in_and_redirect @user, :event => :authentication
  end

  protected

  def auth_hash
    request.env['omniauth.auth']
  end
end

路线

devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }

devise_scope :user do
  get 'sign_in', :to => 'devise/sessions#new', :as => :new_user_session
  get 'sign_out', :to => 'devise/sessions#destroy', :as => :destroy_user_session
end

root :to => "users#front"

[...]

问题

在extern服务上正确登录后,用户将被重定向回OmniauthCallback#openid 正确创建用户没有任何问题。 之后,用户被重定向到root而没有任何问题。 但那时他还没有登录!

我的会话也正确地存储在数据库中。 我没有收到任何错误,它根本无法在sign_in_and_redirect @user, :event => :authentication 如何正确地将会话绑定到用户?

更新

使用Cookie来存储Sessions而不是数据库无法解决。
使用sign_in @user和重新加载页面无法解决。
使用@user.save而不是@user.save! 不解决。

我很感激任何想法。

我终于搞清楚了。 我在“sign_in_and_redirect @user”之前将此行添加到我的oauth回调方法中:

session[:user_id] = @user.id

之后,正确设置current_user。 希望这有助于某人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM