在我的 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) 在我的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)
我看到该方法已被删除。如何生成重置密码令牌并将其发送给用户?
注意:我不想发送默认重置密码电子邮件
我可以选择使用嵌套属性创建用户。我只想跳过确认电子邮件。但
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 的帮助下创建该用户。一切正常。我只想禁用此类用户的确认电子邮件。
我正在登录页面上为 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)
请问有什么建议吗?
我想在 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.referer是http://openapi.qzone.qq.com/oauth/[omitted](我的提供者)
因此,在我的 omniauth 登录后,我再次被重定向到提供程序的 URL。
维基过时了吗?将 omniauth 登录重定向到当前页面的推荐方法是什么?
我正在开发一个包含许多角色的系统,其中一个角色ADMIN可以访问系统的关键部分,我想限制用户的会话,当他/她不与系统交互一段时间时,会话到期,下次他/她应该再次登录,我该怎么做?
我有这个问题
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) 我正在使用本指南在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)
关于我为何会收到此错误的任何想法?
我的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) 我正在使用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)