Ruby on rails 4 设计可邀请-问题与获取用户/邀请/接受?邀请令牌=xxxx重新定向注册
routes.rbRuby on rails 4 设计可邀请-问题与获取用户/邀请/接受?邀请令牌=xxxx重新定向注册,ruby-on-rails-4,devise,devise-invitable,Ruby On Rails 4,Devise,Devise Invitable,routes.rb ruby '2.1.2' rails (4.1.4) devise (3.2.4) devise_invitable (1.3.6) 用户/U控制器.rb devise_for :users, :controllers => { invitations: 'users/invitations' } 应用程序的每个部分都需要经过身份验证-除了接受用户邀请路径之外 我的应用程序控制器确实具有: accept_user_invitation GET
ruby '2.1.2'
rails (4.1.4)
devise (3.2.4)
devise_invitable (1.3.6)
用户/U控制器.rb
devise_for :users, :controllers => { invitations: 'users/invitations' }
应用程序的每个部分都需要经过身份验证-除了接受用户邀请路径之外
我的应用程序控制器确实具有:
accept_user_invitation GET /users/invitation/accept(.:format) users/invitations#edit
remove_user_invitation GET /users/invitation/remove(.:format) users/invitations#destroy
user_invitation POST /users/invitation(.:format) users/invitations#create
new_user_invitation GET /users/invitation/new(.:format) users/invitations#new
PATCH /users/invitation(.:format) users/invitations#update
PUT /users/invitation(.:format) users/invitations#update
class ApplicationController
不知道为什么这不起作用-有人愿意帮助我理解我做错了什么吗?每次我转到URL,我都会被重定向到注册
提前谢谢。我几乎准备好了自己滚 我明白了为什么Desive_invitable重新定向,那是因为邀请令牌不正确 当覆盖发送您自己的电子邮件的默认行为时
class ApplicationController < ActionController::Base
before_action :authenticate_user!
end
看看代码:
有一个临时的原始\u邀请\u令牌,它是您的url和加密的邀请\u令牌所需的实际令牌。我得承认这里有些混乱
在url生成过程中,您必须使用的令牌是原始的\u邀请\u令牌,因为Desive\u invitable将解密此令牌:
当我发送电子邮件或生成链接时,此功能正常:
user = User.invite!(params) do |u|
u.skip_invitation = true
u.invitation_sent_at = Time.now
u.invited_by_id = 1
u.invited_by_type = 'User'
end
对URL使用user.raw\u invitation\u令牌
,该过程将按预期工作
我已经要求改进文档并添加一个拉式请求-希望这对某人有所帮助在筛选之前更改prepend\u如何:要求\u否\u身份验证,:only=>[:编辑,:更新,:销毁]在筛选之前跳过\u:身份验证\u用户@raykin,从Rails v2.3.8开始,在不推荐使用\u过滤器之前跳过\u请参见此处:。使用skip_筛选器仍然不起作用。然而,我正在尝试更多的过滤器-没有成功yetapidock是错误的,在过滤器没有被弃用之前跳过,我在我的rails 4.1.4项目中使用它,没有任何弃用警告。这是rails源代码中的文档。事实上,在rails4中,建议在\u操作之前比在\u过滤器之前进行更多操作。我检查了DeVICE::InvitationController中的一些源代码,我猜您的代码可能是此方法中的错误。您可以自己调试它,也可以自己创建邀请,这应该不会花费太多时间。感谢您查看@raykin,您通过深入查看代码间接帮助我解决了问题嘿,您将原始令牌代码放在哪里?在你看来?
user = User.invite!(params) do |u|
u.skip_invitation = true
u.invitation_sent_at = Time.now
u.invited_by_id = 1
u.invited_by_type = 'User'
end
# use the raw_invitation_token rather than invition_token
# when generating your links for the mailer
token = user.raw_invitation_token
puts "#{accept_user_invitation_url(::ActionMailer::Base.default_url_options.merge({:invitation_token => token})) }"