防止在rails / devise中没有邀请代码的情况下登录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了防止在rails / devise中没有邀请代码的情况下登录相关的知识,希望对你有一定的参考价值。

已解决的场景:如果没有通用代码来控制用户在网站初始测试期间的访问权限,则访问者无法登录(Rails 5.1.6 with devise 4.4.3)

这可以通过如下设置控制器来实现:

class ApplicationController < ActionController::Base

def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:fullname, :invitation])
 devise_parameter_sanitizer.permit(:account_update, keys: [:fullname, :phone_number, :description])
 end
end

然后我调整了用户模型:

class User < ApplicationRecord

attr_accessor :invitation
validates :validate_invitation, presence: true, :on => :create

def validate_invitation
if self.invitation != "123"
   self.errors[:base] << "Enter a valid invitation code"
 end
end

当我使用新用户继续使用该标志时,它会失败。控制台返回以下内容:参数:{...“user”=> {“fullname”=>“Jone”,“邀请”=>“123”,...},“commit”=>“注册” }

但是,登录未经验证,因为:“邀请不能为空”

我看不出错误。

答案

在“attr_accessor:invitation”下面的用户类中添加以下验证:validates:invitation,on :: create,presence:true,included:{in:[“123”]}

并彻底消除def validate_invitation。

以上是关于防止在rails / devise中没有邀请代码的情况下登录的主要内容,如果未能解决你的问题,请参考以下文章

如何将自定义字段添加到 devise_invitable 邀请表单

Heroku/Rails/Devise:你想要的改变被拒绝了

如何在 rails (4.1.5) 中创建固定装置(对于 Devise 用户)作为 yml.erb?

Rails 3.0.9 + Devise + Cucumber + Capybara 臭名昭著的“没有路线匹配 /users/sign_out”

如何在我的 rails API 中有效地使用 Devise 和 Doorkeeper?

Ruby Rails 在控制器中模拟 Devise authed 用户