gpt4 book ai didi

ruby-on-rails - 如何使用 devise_invitable 删除邀请?

转载 作者:行者123 更新时间:2023-12-01 01:04:53 28 4
gpt4 key购买 nike

我的 rails 应用程序上安装了 devise_invitable。创建新邀请正常工作。

我构建了一个 View 来管理邀请列表,并创建了一个表单按钮以允许管理员删除未完成的邀请。这是代码:

<%= link_to "Cancel Invitation", remove_user_invitation_path(invitation_token: invited.invitation_token), confirm: "Are you sure?", class: 'btn btn-mini btn-danger' %>

结果总是报错“提供的邀请 token 无效!”

查看服务器日志,我看到如下内容:
Started GET "/invitation/remove?invitation_token=f4e26062f27c7cc32a60e2024b9dba2b1350abba" for 127.0.0.1 at 2013-10-28 15:07:44 -0700
Processing by Devise::InvitationsController#destroy as HTML
Parameters: {"invitation_token"=>"f4e26062f27c7cc32a60e2024b9dba2b1350abba"}
User Load (2.9ms) SELECT "users".* FROM "users" WHERE "users"."invitation_token" = '46488d68fb36387ec639d5d6b9749273b56561a944f76eeefb2f5294ea5225e6' LIMIT 1

这表明 delete 方法不需要原始邀请 token 。
(我可以从安全的角度理解这一点。)

我应该传递给 remove_user_invitation_path 什么值?

最佳答案

我目前正在构建完全相同的东西,并遇到了同样的问题。

我发现当 Devise-Invitable 接受链接 token 实际上是“原始” token 的加密版本时。原始 token 不会持久化 - 它是(受邀的)用户对象上的实例变量。 (参见 lib/devise_invitable/model.rb 中的 generate_invitation_token() )

由于您已经在列表页面上,原始用户对象早已不复存在,剩下的就是持久化的内容。

我看到了一些解决这个问题的方法 - 或者在用户被邀请时保留 raw_invitation_token。 (您可以通过向用户添加另一列并覆盖相关的邀请()方法来做到这一点。多次保存或诱人的猴子补丁会很快变得令人讨厌。)

我开始沿着路线前进并完成了大约 90% 的过程,然后我意识到即使你让它工作,标准的删除端点实际上希望用户没有登录,这迫使我重新思考为什么我需要重用它反正路线?

所以我当前的解决方案涉及一个新的端点,它 1) 使用除 User.find_by_invitation_token() 之外的不同 finder 方法(它解密 token ),并且不检查您是否已注销:-)

例如。

class InvitationsController < ApplicationController
...

before_filter :user_from_invitation_token

def remove
User.destroy(@user.id)
flash[:notice] = 'Invitation removed'
redirect_to company_users_path
end

private

def user_from_invitation_token
unless params[:invitation_token] && @user = @company.invited_users.where(invitation_token: params[:invitation_token]).first
flash[:error] = 'Invitation not found'
redirect_to company_users_path
end
end
...

这是一个 WIP,我对解决方案不是 100% 满意 - 但是,如果您正在构建用于管理邀请的 UI,那么您就超越了 Devise-invitable 提供的开箱即用的功能。

关于ruby-on-rails - 如何使用 devise_invitable 删除邀请?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19646175/

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