簡體   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