gpt4 book ai didi

ruby-on-rails - Rails 4 - 设计不绑定(bind) session

转载 作者:行者123 更新时间:2023-12-02 01:59:45 25 4
gpt4 key购买 nike

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

Controller (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"

[...]

问题

在外部服务正确登录后,用户将被重定向回 OmniauthCallback#openid。用户正在正确创建,没有任何问题。之后,用户将毫无问题地重定向到 root。但此时他仍未登录!

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

更新

用Cookies来存储Session而不是数据库也解决不了。
使用 sign_in @user 并重新加载页面没有解决。
使用 @user.save 而不是 @user.save! 无法解决。

我很感激任何想法。

最佳答案

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

session[:user_id] = @user.id

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

关于ruby-on-rails - Rails 4 - 设计不绑定(bind) session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17839085/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com