gpt4 book ai didi

ruby-on-rails - Rails 4 - 设计, guest 用户导致过滤器链停止

转载 作者:数据小太阳 更新时间:2023-10-29 07:00:24 25 4
gpt4 key购买 nike

我刚刚开始开发 Rails 4 (4.2.3) 应用程序,我在其中使用 Devise 进行用户身份验证。我希望用户能够在注册之前通过创建测试项目并以访客用户身份登录来试用该应用程序。当用户注册(或注册)时,我想将测试项目分配给新的当前用户。

我一直在关注 Platformatec 的指南:https://github.com/plataformatec/devise/wiki/How-To:-Create-a-guest-user

创建 guest 用户有效,但是在注册或进入事件的 guest 用户 session 时,我收到以下错误:

Filter chain halted as :require_no_authentication rendered or redirected

如果我清除我的 session ,它就会工作。管理 guest 用户的方法如下所示:

def current_or_guest_user
if current_user
if session[:guest_user_id] && session[:guest_user_id] != current_user.id
logging_in
guest_user(with_retry = false).try(:destroy)
session[:guest_user_id] = nil
end
current_user
else
guest_user
end
end

如前所述,创建 guest 用户似乎工作得很好。但这种逻辑永远不会发生:

# should delete the guest user and clear the session. 
if current_user
if session[:guest_user_id] && session[:guest_user_id] != current_user.id
logging_in
guest_user(with_retry = false).try(:destroy)
session[:guest_user_id] = nil
end
current_user

我很确定我的 guest 用户 session 与我的新用户冲突并导致此设计错误(因为 guest 用户在注册时永远不会被删除):

Filter chain halted as :require_no_authentication rendered or redirected

我的访客用户逻辑的其余部分看起来或多或少与此链接指南完全相同:https://github.com/plataformatec/devise/wiki/How-To:-Create-a-guest-user .我还添加了身份验证段落/示例中的代码:https://github.com/plataformatec/devise/wiki/How-To:-Create-a-guest-user#authentication-this-may-interfere-with-the-current_user-helper .

关于我缺少什么的任何想法,以及如何让我的 current_or_guest_user 在使用 Devise 时删除注册和签名时的 guest 用户?

更新

这是我的路线目前的样子:

devise_for :users, controllers: { sessions: "users/sessions", registrations:  "users/registrations" }

root :to => 'public#index'

resources :apps

get 'users/show', to: "users#show"
get 'users', to: "users#index"

post 'guests/receive_guest', to: "guests#receive_guest"

更新 2

指南有以下声明:

When (and if) the user registers or logs in, we delete the guest user and clear the session variable.

它没有详细说明如何以及在何处进行操作。我猜我必须再次在某处调用 current_or_guest_user。但我不确定在哪里,因为我对 Devise 不太熟悉。

更新 3

为了更清楚一点。这是我想要实现的步骤。

  1. 用户创建了一个测试项目。
  2. 创建测试项目后,将创建 guest 用户和 session 。一旦 session 结束或#3, guest 用户应该被删除。
  3. 如果 guest 用户注册,他/她应该登录并且测试项目应该分配给新的真实用户。
  4. guest 用户应该被删除。

最佳答案

上面的回答缺乏解释,loggin_in 方法没有被调用,因为你没有定义你的回调

在您的 ApplicationController 中,您需要像这样定义并设置回调:

define_callbacks :logging_in_user
set_callback :logging_in_user, :before, :transfer_guest_user_actions_to_current_user

def transfer_guest_user_actions_to_current_user
# todo
end

您是否尝试过使用 devise-guests gem ?它开箱即用地实现了这个功能,而不是从头开始......

检查这个example实现 guest 登录的 Controller 。希望对您有所帮助。

关于ruby-on-rails - Rails 4 - 设计, guest 用户导致过滤器链停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33744842/

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