cjk*_*ski 5 ruby-on-rails devise-invitable
我在 Rails 应用程序上安装了 devise_invitable 。创建新邀请工作正常。
我构建了一个视图来管理邀请列表,并创建了一个表单按钮以允许管理员删除未完成的邀请。这是代码:
<%= link_to "Cancel Invitation", remove_user_invitation_path(invitation_token: invited.invitation_token), confirm: "Are you sure?", class: 'btn btn-mini btn-danger' %>
Run Code Online (Sandbox Code Playgroud)
结果始终是错误“提供的邀请令牌无效!”
查看服务器日志,我看到类似以下内容:
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
Run Code Online (Sandbox Code Playgroud)
这表明删除方法不需要原始邀请令牌。(从安全角度我可以理解这一点。)
我应该将什么值传递给remove_user_invitation_path?
小智 5
我现在正在构建完全相同的东西,并遇到了同样的问题。
我发现,当 Devise-Invitable 接受链接令牌时,实际上是“原始”令牌的加密版本。原始令牌不会持久保存 - 它是(受邀的)用户对象上的实例变量。(参见 lib/devise_invitable/model.rb 中的generate_invitation_token())
由于您已经位于列表页面上,因此原始用户对象早已消失,剩下的只是保留的内容。
我看到了一些解决这个问题的方法 - 要么在邀请用户时保留 raw_invitation_token 。(您可以通过向用户添加另一列并覆盖相关的 inform() 方法来实现这一点。通过多次保存或诱人的猴子补丁,这很快就会变得令人讨厌。)
我开始沿着路线走,大约完成了 90% 后,我才意识到,即使你让它工作,标准删除端点实际上也期望用户不登录,这迫使我重新思考为什么我需要重用它无论如何?
因此,我当前的解决方案涉及一个新端点,其中 1)除了 User.find_by_invitation_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
...
Run Code Online (Sandbox Code Playgroud)
这是一个 WIP,我对这个解决方案并不是 100% 满意 - 然而,如果您正在构建一个用于管理邀请的 UI,那么您就超越了 Devise-invitable 提供的开箱即用的功能,这是有道理的。
归档时间: |
|
查看次数: |
1857 次 |
最近记录: |