2
ruby '2.1.2'

rails (4.1.4)
devise (3.2.4)
devise_invitable (1.3.6)

路线.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

耙路线

        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 时,我都会被重定向到注册

提前致谢。我几乎准备好自己动手了!

4

1 回答 1

2

我弄清楚了为什么 devise_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

查看代码: https ://github.com/scambra/devise_invitable/blob/master/lib/devise_invitable/model.rb#L200

有一个临时的 raw_invitation_token 是您的 url 和invitation_token 所需的实际令牌,它是加密的。我不得不承认这里有些混乱!

在您的 url 生成中,您必须使用的令牌是 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您的网址,该过程按预期工作

我已要求改进文档并添加拉取请求-希望这对某人有所帮助

于 2014-08-20T00:12:59.070 回答