ruby '2.1.2'
rails (4.1.4)
devise (3.2.4)
devise_invitable (1.3.6)
的routes.rb
devise_for :users, :controllers => { invitations: 'users/invitations' }
用户/ invitations_controller.rb
class Users::InvitationsController < Devise::InvitationsController
prepend_before_filter :require_no_authentication, :only => [:edit, :update, :destroy]
# i dont need to override anything
end
rake routes
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
应用程序的每个部分都需要进行身份验证 - 除了 accept_user_invitation 路径
我的应用程序控制器确实有:
class ApplicationController < ActionController::Base
before_action :authenticate_user!
end
不确定为什么这不起作用 - 有人关心帮助我理解我做错了什么吗?每次我转到URL时,我都会被重定向到注册
提前致谢。我几乎准备好自己动手了!
答案 0 :(得分:1)
我弄清楚为什么devise_invitable正在重定向,那是因为invitation_token不正确。
覆盖默认行为以发送您自己的电子邮件
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
查看代码: https://github.com/scambra/devise_invitable/blob/master/lib/devise_invitable/model.rb#L200
有一个临时的raw_invitation_token,它是您加密的url和invitation_token所需的实际令牌。我不得不承认这里有一些混乱!
在您的网址生成中,您必须使用的令牌是raw_invitation_token,因为devise_invitable会解密此令牌:https://github.com/scambra/devise_invitable/blob/master/lib/devise_invitable/model.rb#L277
当我发送电子邮件或生成链接时,这有效:
# 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})) }"
使用user.raw_invitation_token
作为您的网址,该流程可按预期工作
我已经要求改进文件并添加拉取请求 - 希望这有助于某人