标签: devise-invitable

改变devise_invitable邮件主题

默认情况下,邀请邮件的主题是

  mailer:
      invitation_instructions:
        subject: 'Invitation instructions'
Run Code Online (Sandbox Code Playgroud)

我想改成它

subject: '%{invited_by} has invited you!'
Run Code Online (Sandbox Code Playgroud)

但是这需要让i8n的translate方法可以访问invite_by变量.

如何在不更改默认行为的情况下访问/声明此变量?

ruby-on-rails actionmailer devise rails-i18n devise-invitable

8
推荐指数
1
解决办法
2182
查看次数

更改了Devise邮件程序模板路径,现在Devise Invitable的电子邮件主题行失败

我创建了一个自定义设计邮件程序来更改视图中Devise电子邮件模板的位置.我做了以下更改:

#/config/initializers/devise
config.mailer = 'CustomDeviseMailer'
Run Code Online (Sandbox Code Playgroud)

# app/mailers/customer_devise_mailer.rb
    def headers_for(action, opts)
        headers = {
            :subject       => translate(devise_mapping, action),
            :from          => mailer_sender(devise_mapping),
            :to            => resource.email,
            :template_path => '/mailers/devise'
        }.merge(opts)
    end
Run Code Online (Sandbox Code Playgroud)

现在我的电子邮件模板位于:/ app/views/mailers/devise /

问题是当一个Devise Invitable .invite!发出呼叫,电子邮件的主题行说明错误:" translation missing: en.#<Devise::Mapping:0x007fe8fb6f4578>".

我怀疑我需要对/config/locales/devise_invitable.en.yml文件进行调整.我也用/app/controllers/invitations_controller.rb.覆盖了Devise Invitable控制器.

我应该对devise_invitable.en.yml文件做什么补充?谢谢.

ruby-on-rails devise devise-invitable

6
推荐指数
1
解决办法
2919
查看次数

如何邀请用户(使用devise_invitable)并在邀请过程中填充其他字段?

例如,当我去时users/invitations/new,唯一的领域是:email.我想邀请一位用户,除了提供他们的电子邮件外,还提供:

  • 名字
  • 角色
  • 公司(user belongs_to company)

我创建了Users::InvitationsController < Devise::InvitationsController:

class Users::InvitationsController < Devise::InvitationsController
   private
   def resource_params
     params.permit(user: [:email, :invitation_token, :role, :company_id])[:user]
   end
end
Run Code Online (Sandbox Code Playgroud)

我把这些字段添加到了users/invitations/new.邀请发送正常,但是当我接受它并输入密码时,我的验证失败了No role is selected(b/c验证).

如何在发送邀请之前设置这些字段并将其保留并在接受邀请时保存?谢谢!

ruby ruby-on-rails devise devise-invitable

6
推荐指数
1
解决办法
778
查看次数

设计邀请不要验证模型

首先,原谅我可怜的英语,我是法国人......解释我的问题很棘手!

我在Rails应用程序中有一个模型用户模型:

class User < ActiveRecord::Base

  attr_accessible :email, :gender, :lastname, :firstname    

end
Run Code Online (Sandbox Code Playgroud)

以及从User继承的BackUser模型:

class BackUser < User
  # Class for Backoffice User
  devise :database_authenticatable, 
          :rememberable, 
          :trackable, 
          :lockable, 
          :invitable, 
          :confirmable,
          :validatable,
          :validate_on_invite => true

  attr_accessible :password, :password_confirmation, :remember_me, :active, :role

  validates :role, presence: true,
                  inclusion: ["admin", "normal"]

  validates :gender, presence: true

  validates :firstname, presence: true

  validates :lastname, presence: true


  def admin?
    self.role == 'admin'
  end

end
Run Code Online (Sandbox Code Playgroud)

第二节课应该在邀请之前验证记录!但是,当我使用控制台执行以下操作时:

u = BackUser.new
u.invite!
Run Code Online (Sandbox Code Playgroud)

"u"保存在数据库中,邀请被发送到空白电子邮件...

你知道我要做什么吗?

吃了很多!

ruby-on-rails devise devise-invitable

5
推荐指数
2
解决办法
2786
查看次数

如何使用 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?

ruby-on-rails devise-invitable

5
推荐指数
1
解决办法
1857
查看次数

设计邀请生成accept_invitation_url

我正在使用Devise邀请函。通常,在邀请电子邮件中,会有一个链接将被邀请者重定向到sign_in页面,类似这样的网址

mywebsite.com/users/invitation/accept?invitation_token=J-azZ8fKtkuAyp2VZWQX
Run Code Online (Sandbox Code Playgroud)

该网址来自Invitation_instructions.html:

<p><%= link_to 'Accept invitation', accept_invitation_url(@resource, :invitation_token => @token) %></p>
Run Code Online (Sandbox Code Playgroud)

现在,我想在控制器中返回邀请网址作为json响应,如下所示:

def invite
  invitee = User.invite!({:email => email}, current_user)
  accept_invitation_url = ....
  render :json => accept_invitation_url
end
Run Code Online (Sandbox Code Playgroud)

任何想法如何在控制器中获取accept_invitation_url?谢谢!

ruby-on-rails devise devise-invitable

5
推荐指数
1
解决办法
4843
查看次数

Rails 4 devise_invitable邀请令牌无效

我一直在关注Ryan Boland优秀的Rails多租户教程,但是遇到了devise_invitable.我在用...

Rails 4.1.5 
devise 3.3.0  
devise_invitable 1.3.6
Postgresql
Run Code Online (Sandbox Code Playgroud)

我在选定的子域(mysubdomain.lvh.me:3000)上创建了一个新帐户和用户/帐户所有者,我可以从中发送用户邀请.我在隐身Chrome会话中打开邀请链接,以确保我没有登录或有任何当前会话.点击邀请链接后,我被重定向到登录页面(mysubdomain.lvh.me:3000/users/sign_in)并看到一个闪光通知:"提供的邀请令牌无效!"

我正在使用一个非常简单的邮件程序视图(app/views/devise/mailer/invitation_instructions.html.erb)...

<%= link_to 'Accept invitation', accept_invitation_url(@resource, :invitation_token => @token) %>
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我保证的@token使用,如所描述这里.

创建邀请后,我确认邀请令牌已保存到数据库中(在本例中为hey@test.com - d1801fd8df78bd8cd125d5d8091fdc6a72c8f8faf4136cb282d497ec612195e9).我已经确认这符合接受请求时邀请查找的令牌(见下面的跟踪).但是,它会重定向到用户登录页面而不是完成注册,并且还会在跟踪日志中显示"过滤器链暂停为:resource_from_invitation_token呈现或重定向".在此交易之后,用户最终仍未确认.

关于我在这里可能出现什么问题的任何想法?我在下面包括日志,我的应用程序控制器和我的设计配置......

以下是邀请创建的跟踪日志:

Started POST "/users/invitation" for 127.0.0.1 at 2014-09-07 01:28:33 +0800
Processing by Devise::InvitationsController#create as HTML
  Parameters: {"utf8"=>"?", "authenticity_token"=>"BiIQ95wwdQz3CJ0+OoLOE9xHHvxhloHsRHrxsqf1D2Q=", "user"=>{"email"=>"hey@test.com"}, "commit"=>"Invite User"}
  User Load (4.1ms)  SELECT  "users".* FROM "users"  WHERE "users"."id" = 1  ORDER BY "users"."id" ASC LIMIT 1
  Account Load (0.4ms)  SELECT  "public"."accounts".* FROM "public"."accounts"  WHERE "public"."accounts"."subdomain" = 'mysubdomain' LIMIT 1 …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails multi-tenant devise ruby-on-rails-4 devise-invitable

5
推荐指数
1
解决办法
2158
查看次数

使用delivery_later时在邮件程序中无法访问attr_accessor

我正在使用devise_invitable邀请用户加入应用程序,因为我想在电子邮件中添加自定义消息。所以我的代码看起来像这样。

#user.rb
attr_accessor :message

def self.invite(emails, message)
  User.invite!({email: email}) do |user|
    user.message = message
  end
end

#here I am overriding devise_invitable method to send mails later
def send_devise_notification(notification, *args)
  devise_mailer.send(notification, self, *args).deliver_later
end

#users_controller.rb
def invite_user
  User.invite(params[:email], params[:message]) 
end    

#invitation_instructions.html.erb
<% if @resource.message %>
  <p><%= @resource.message %></p>
<% end %>    
Run Code Online (Sandbox Code Playgroud)

当我只使用传递时,邮件上会显示消息,但是当我在邮件视图中使用nil中的delivery_later attr_accessor时。

ruby-on-rails actionmailer ruby-on-rails-4 devise-invitable

5
推荐指数
1
解决办法
218
查看次数

Rails设计删除/取消用户不起作用

如果再问两次,我深表歉意。因为已经问过这个问题,但是根本没有任何帮助:(

因此,问题部分是当我实现Invitable时 ,成功实现后,除destroy_user_registration之外,其他所有东西都可以正常工作。

<%= link_to user_registration_path(resource_name), method: :delete do %>
    <span class="text">Delete My Account</span>
<% end %>
Run Code Online (Sandbox Code Playgroud)

这是用户部分的routes.rb

devise_for :users, path: '', path_names: {
 sign_in: 'login',
 sign_out: 'logout',
 sign_up: 'register',
 password: 'reset',
 edit: 'account'
}
Run Code Online (Sandbox Code Playgroud)

ruby rubygems ruby-on-rails devise devise-invitable

5
推荐指数
0
解决办法
85
查看次数

devise_invitable:仅允许管理员邀请用户

我正在使用devise_invitablegem在我的应用程序中启用邀请以及设计rails 3应用程序.我有一个User&Profile模型.在User,有一个role列给出了用户类型.

现在,我想限制创建新邀请的功能仅限于管理员通过确定这个范围路线到devise/invitations#new哪里user.role=='admin'和打开其他人的路线.这样的事情

MyApp::Application.routes.draw do

devise_for :users, skip: [:registrations, :invitations]

as :user do
 get 'users/edit' => 'devise/registrations#edit', as: 'edit_user_registration'
  put 'users' => 'devise/registrations#update', as: 'user_registration'

# manually define alll devise_invitable routes, except devise/invitations#new

# accept_user_invitation GET /users/invitation/accept(.:format) devise/invitations#edit

# user_invitation POST /users/invitation(.:format) devise/invitations#create

# also the #accept route goes here

end



resource :profile, except: :destroy

authenticated :user, lambda {|u| u.role == "admin"} do

resources …
Run Code Online (Sandbox Code Playgroud)

routes ruby-on-rails devise devise-invitable

4
推荐指数
2
解决办法
4660
查看次数