标签: devise

未定义的局部变量或方法 'rolify'

在我的 Rails 项目中,我尝试使用以下 Gems 设置用户身份验证和用户角色:

  • 设计
  • 可以可以
  • 轮化

我有设计并完美地工作,但是当我去设置 CanCan 和 Rolify 时,我在浏览器中收到此错误:

NameError in Home#index

Showing C:/Sites/JustManage/app/views/devise/menu/_registration_items.html.erb where line #1 raised:

undefined local variable or method `rolify' for #<Class:0x3f48660>
Extracted source (around line #1):

1: <% if user_signed_in? %>
2: 
3:   <li>
4:      <%= link_to('Edit registration', edit_user_registration_path) %>
Trace of template inclusion: app/views/layouts/application.html.erb

Rails.root: C:/Sites/JustManage
Run Code Online (Sandbox Code Playgroud)

用户名

class User < ActiveRecord::Base
  rolify

  # Include default devise modules. Others available are:
  # :token_authenticatable, :confirmable,
  # :lockable, :timeoutable and :omniauthable …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails devise cancan rolify

0
推荐指数
1
解决办法
1698
查看次数

NoMethodError - User:Class 的未定义方法“reset_password_token”:

在我的Rails应用程序中,我有一个供管理员创建普通用户的表单。在 中create action,我正在生成一个重置密码令牌,并向用户发送一封欢迎邮件,其中包含一个用于重置他的密码的链接。这是我的代码。

@user = User.new params[:user]
@user.reset_password_token = User.reset_password_token
@user.reset_password_sent_at = Time.now.utc
if @user.save
  UserMailer.welcome_email(@user).deliver
  ..
Run Code Online (Sandbox Code Playgroud)

这工作正常,但我有另一个具有相同代码的应用程序,但使用devise 3.2.2时出现此错误。

NoMethodError - undefined method `reset_password_token' for User:Class:
Run Code Online (Sandbox Code Playgroud)

我看到该方法已被删除。如何生成重置密码令牌并将其发送给用户?

注意:我不想发送默认重置密码电子邮件

ruby-on-rails devise

0
推荐指数
1
解决办法
2458
查看次数

通过嵌套属性创建用户时防止仅设计确认电子邮件

我可以选择使用嵌套属性创建用户。我只想跳过确认电子邮件。但

class ShipperOrder < ActiveRecord::Base
  belongs_to :user
  accepts_nested_attributes_for :user
end

class User < ActiveRecord::Base
  has_many :shipper_orders
end
Run Code Online (Sandbox Code Playgroud)

控制器

class ShipperOrdersController < ApplicationController
  def create
    @shipper_order = ShipperOrder.new(order_params)
    if @shipper_order.save
        flash[:notice] = "Shipper order created"
    else
        flash.now[:alert] = @shipper_order.errors.full_messages.join(", ")
        render :error
    end
  end

  private

  def order_params
    params.require(:shipper_order).permit({user_attributes: [:first_name, :email,
     :last_name,:mobile_phone, :password, :terms_of_service, :password_reset_required 
     ]}, :description)
  end
end
Run Code Online (Sandbox Code Playgroud)

现在我正在创建一个订单,如果用户想将此订单分配给数据库中不存在的用户。然后我在nested_attributes 的帮助下创建该用户。一切正常。我只想禁用此类用户的确认电子邮件。

ruby ruby-on-rails devise devise-confirmable

0
推荐指数
1
解决办法
147
查看次数

语法错误,意外的 '\n',期待 =&gt;

我正在登录页面上为 LinkedIn 实施 OmniAuth,但出现此错误:

SyntaxError  
/app/models/user.rb:9: syntax error, unexpected '\n', expecting =>  
Run Code Online (Sandbox Code Playgroud)

它正在查看的代码是这样的:

class User < ActiveRecord::Base  
  attr_accessor :email, :password, :password_confirmation  
  VALID_EMAIL_REGEX = /([\w+.]+)@[a-z0-9\-.]+\.[a-z]+/i   
  validates :email, presence: true,   
                    format: { with: VALID_EMAIL_REGEX },   
                    uniqueness: { case_sensitive: false }  
  validates :password, presence: true, length: { minimum: 6 }  
  validates :password_confirmation, presence: true  
  devise :rememberable, :omniauthable, :omniauth_providers => [:linkedin], :trackable
end
Run Code Online (Sandbox Code Playgroud)

请问有什么建议吗?

ruby ruby-on-rails devise omniauth ruby-on-rails-4

0
推荐指数
1
解决办法
5280
查看次数

使用 omniauth 重定向回当前页面并设计

我想在 oauth 登录后重定向回当前页面,我遵循了这个 Devise wiki并执行了以下操作:

  def after_sign_in_path_for(resource)
    sign_in_url = new_user_session_url
    if request.referer == sign_in_url
      super
    else
      request.env['omniauth.origin'] || stored_location_for(resource) || request.referer || root_path
    end
  end
Run Code Online (Sandbox Code Playgroud)

request.env['omniauth.origin']http://www.bubutravel.com/users/sign_in

stored_location_for(resource) 是零

request.refererhttp://openapi.qzone.qq.com/oauth/[omitted](我的提供者)

因此,在我的 omniauth 登录后,我再次被重定向到提供程序的 URL。

维基过时了吗?将 omniauth 登录重定向到当前页面的推荐方法是什么?

devise omniauth

0
推荐指数
1
解决办法
1089
查看次数

Rails/Devise - 如何在'x`分钟不活动后注销用户?

我正在开发一个包含许多角色的系统,其中一个角色ADMIN可以访问系统的关键部分,我想限制用户的会话,当他/她不与系统交互一段时间时,会话到期,下次他/她应该再次登录,我该怎么做?

session ruby-on-rails devise ruby-on-rails-5

0
推荐指数
1
解决办法
1411
查看次数

用户的未定义方法“设计”(调用“ User.connection”以建立连接):类

我有这个问题

undefined method `devise' for User (call 'User.connection' to establish a connection):Class
Run Code Online (Sandbox Code Playgroud)

这里的每个答案指出下面的命令未运行

rails generate devise:install
Run Code Online (Sandbox Code Playgroud)

但是我实际上完成了安装devise gem的过程,还添加了omniauth-facebook gem,它可以工作几次。但是,当我尝试提交并加载我的生产站点时,它就会中断,这就是错误所在,然后我回到我的测试站点,无论如何,它也会中断,这是完整的代码

gemfile:

gem 'rails', '~> 5.0.2'
gem 'puma', '~> 3.0'
gem 'sass', '~> 3.5', '>= 3.5.1'
gem 'sass-rails', '~> 5.0.4'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.2'
gem 'autoprefixer-rails', '~> 7.1', '>= 7.1.3'
gem 'jquery-rails'
gem 'turbolinks', '~> 5'
gem 'jbuilder', '~> 2.5'
gem 'devise'
gem 'bootstrap', '~> 4.0.0.beta'
gem 'font-awesome-rails', '~> 4.7', '>= 4.7.0.1'
gem 'country_select'
gem 'carrierwave', '~> 0.11.2' …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails devise

0
推荐指数
1
解决办法
1257
查看次数

在Devise中跳过身份验证时未定义的方法`skip_before_action'

我正在使用本指南在Rails中设置Devise:http: //codepany.com/blog/rails-5-user-accounts-with-3-types-of-roles-devise-rails_admin-cancancan/

它表示将其放在您的家庭控制器上以防止Devise在您的主页上请求身份验证:

skip_before_action :authenticate_user!, :only => [:index]
Run Code Online (Sandbox Code Playgroud)

我的家庭控制器叫dev,所以我的dev_controller.rb看起来像这样:

class DevController < ApplicationController
  def index

  skip_before_action :authenticate_user!, :only => [:index]

  end
end
Run Code Online (Sandbox Code Playgroud)

现在,当我访问我的网站时,我收到此错误:

undefined method `before_action' for #<MenuController:0xb193b640>
Run Code Online (Sandbox Code Playgroud)

关于我为何会收到此错误的任何想法?

ruby ruby-on-rails devise

0
推荐指数
1
解决办法
924
查看次数

无法自动加载常量JWTBlacklist,需要使用/home/sourabh/dev/celebration/app/models/jwt_blacklist.rb进行定义(LoadError)

我的user.rb模型包含:

class User < ApplicationRecord

  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable,
         :confirmable, :lockable, :timeoutable, :omniauthable,
         :jwt_authenticatable, jwt_revocation_strategy: JWTBlacklist

  def send_devise_notification(notification, *args)
    devise_mailer.send(notification, self, *args).deliver_later
  end
end
Run Code Online (Sandbox Code Playgroud)

我正在使用devise-jwt gem登录我的Rails api。

我的JWTBlacklist.rb模型包含:

class JwtBlacklist < ApplicationRecord
  include Devise::JWT::RevocationStrategies::Blacklist

  self.table_name = 'jwt_blacklist'
end
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails devise jwt

0
推荐指数
1
解决办法
1140
查看次数

当密码正确且电子邮件不是参数时,Rails Devise“无效的电子邮件或密码”

我正在使用Devisegem执行基本身份验证。在中application_controller.rb,我具有以下内容before_action

def configure_permitted_parameters
   devise_parameter_sanitizer.permit(:sign_up, keys: [:name, :password])
   devise_parameter_sanitizer.permit(:sign_in, keys: [:name, :password])
   devise_parameter_sanitizer.permit(:account_update, keys: [:name, :password])
end
Run Code Online (Sandbox Code Playgroud)

当我尝试使用简单的名称/密码形式登录时,出现错误:“无效的电子邮件或密码”。我知道用户名和密码正确。电子邮件甚至都不是要发送的参数:

Started POST "/users/sign_in" for 127.0.0.1 at 2019-03-12 02:47:06 -0700
Processing by Devise::SessionsController#create as HTML
  Parameters: {"utf8"=>"?", "authenticity_token"=>"ltvCys0g2WE8JWRaoQOYbt6LLe9mtJGCQ0hAoCiLCVsXAvfLuTpm02jrJnLjKk4AARSO1B9YLe3QyTTBs1d8iw==", "user"=>{"name"=>"my_name", "password"=>"[FILTERED]"}, "commit"=>"Log in"}
Completed 401 Unauthorized in 3ms (ActiveRecord: 0.0ms)
Run Code Online (Sandbox Code Playgroud)

这里是user.rb

class User < ApplicationRecord
  devise :rememberable, :trackable, :lockable,
         :database_authenticatable, :timeoutable,
         :recoverable

  validates :name,
            :presence => true,
            :uniqueness => {
              :case_sensitive => false
            }

  def self.find_for_database_authentication(warden_conditions)
    conditions …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails devise

0
推荐指数
1
解决办法
54
查看次数