Ruby on rails Desive在登录后未将用户发送到root
designe的默认行为应该是在登录后将用户发送到根路径。我的是没有做到这一点,而是简单地呈现登录页面再次。它正在让用户登录。它只是没有正确地重定向 development.log(带有显示用户操作的注释) sessions/new.html.haml 应用程序\u controller.rb 初始值设定人/designe.rb GemfileRuby on rails Desive在登录后未将用户发送到root,ruby-on-rails,devise,Ruby On Rails,Devise,designe的默认行为应该是在登录后将用户发送到根路径。我的是没有做到这一点,而是简单地呈现登录页面再次。它正在让用户登录。它只是没有正确地重定向 development.log(带有显示用户操作的注释) sessions/new.html.haml 应用程序\u controller.rb 初始值设定人/designe.rb Gemfile 源代码'https://rubygems.org' git_源(:github)do | repo_名称| repo_name=“#{repo_name
源代码'https://rubygems.org'
git_源(:github)do | repo_名称|
repo_name=“#{repo_name}/#{repo_name}”除非repo_name.include(?“/”)
"https://github.com/#{repo_name}.git“
结束
gem'aws sdk rails','~>2.0','>=2.0.1'
gem'bootstrap sass','~>3.3','>=3.3.7'
gem‘坎坎坎’,‘~>2.1’,‘>=2.1.3’
gem“咖啡轨”,“~>4.2”
gem“国家/地区选择”,“~>3.1”,“>=3.1.1”
宝石“设计”,“大于4.4”,“大于等于4.4.1”
gem'haml rails',“~>1.0”
gem'jbuilder',“~>2.5”
gem'jqueryrails','~>4.3','>=4.3.1'
gem“简单形式”,“~>3.5”
宝石“回形针”,“~>5.2.1”
宝石'pg','~>0.18'
宝石“彪马”,“大于3.7”
gem'rails',“~>5.1.4”
gem'sass-rails',“~>5.0”
gem“涡轮链接”,“大于5”
gem'uglifier','>=1.3.0'
gem“验证”、“~>4.0”、“>=4.0.2”
小组:开发,:测试
gem“byebug”,平台:%i[mri mingw x64\u mingw]
宝石“水豚”,“大于2.13”
gem“selenium webdriver”
结束
小组:发展怎么办
gem“web控制台”,“>=3.3.0”
gem'listen','>=3.0.5','<3.2'
宝石“春天”
gem‘SpringWatcherListen’,“~>2.0.0”
结束
user.rb
class用户
尝试将其添加到ApplicationController.rb
:
def after_sign_in_path_for(resource)
root_path
end
根据日志中的此回滚,我相信您会收到验证错误:
...
1m[35m (0.3ms)[0m [1m[35mBEGIN[0m
[1m[36mUser Exists (0.7ms)[0m [1m[34mSELECT 1 AS one FROM "users" WHERE LOWER("users"."username") = LOWER($1) AND ("users"."id" != $2) LIMIT $3[0m [["username", "josh"], ["id", 1], ["LIMIT", 1]]
[1m[36mUser Exists (0.5ms)[0m [1m[34mSELECT 1 AS one FROM "users" WHERE LOWER("users"."email") = LOWER($1) AND ("users"."id" != $2) LIMIT $3[0m [["email", "joshuaikesling@gmail.com"], ["id", 1], ["LIMIT", 1]]
[1m[36mUser Exists (0.5ms)[0m [1m[34mSELECT 1 AS one FROM "users" WHERE "users"."email" = $1 LIMIT $2[0m [["email", "josh"], ["LIMIT", 1]]
[1m[35m (0.3ms)[0m [1m[31mROLLBACK[0m
Rendering devise/sessions/new.html.haml within layouts/application
...
可能是由于对您的用户模型进行了验证而导致的
确保在应用程序布局中呈现这两个flash消息键,因为Desive将向其写入:
flash[:notice]
和flash[:alert]
旁注:
def configure_permitted_parameters
added_attrs = [:username, :email, :password, :password_confirmation, :remember_me, :admin]
devise_parameter_sanitizer.permit :sign_up, keys: added_attrs
devise_parameter_sanitizer.permit :account_update, keys: added_attrs
end
上面的代码对我来说似乎很粗略,也许不是问题<代码>:管理员可能不应该被列入<代码>:注册的白名单,也许我错了?在未验证用户是否为管理员的情况下,可能也不适用于帐户\u更新
——但我没有任何上下文,因此可能我不正确
Desive的初始值设定项已具有用于验证电子邮件格式的正则表达式。从用户模型中删除验证可修复此问题。模型中的验证出现了一个静默错误,导致它重新呈现登录页面,即使它已成功登录用户,而不是在登录后将用户重定向到根路径 可能是错误的电子邮件或密码?这是本例中的正常行为。它正在成功登录用户。我已经仔细检查过了。我想这是默认的Desive实现?验证只会影响新用户的创建,对吗?在
application.html.haml
中为所有页面呈现错误并正常工作。例如,如果我尝试使用错误的密码登录。我没有收到错误,我只是没有被重定向到根路径。我可以创建一个新帐户并登录,没有任何问题。用户正在成功登录。至于admin-allowed属性,我需要它来允许现有管理员将管理员权限分配给典型的用户帐户。如果没有白名单,管理员就不能提升其他用户。添加了属性。非常感谢。有没有办法让我确切地知道是什么导致了回滚?我不认为这是导致重定向失败的原因,但是,你永远不知道。它正在执行一个用户存在
查询(3次?)。我猜这是从电子邮件和用户名的唯一验证中得到的-designe可能会在默认情况下添加其中一些,然后可能会有一个额外的(重复)?查看BEGIN
和ROLLBACK
之间的3个查询,其中一个可能是验证引起的问题?我只是在猜。。。也许是别的原因。Desive初始值设定项已进行电子邮件验证。我更改了它用于匹配模型中的验证正则表达式,并删除了模型验证。现在一切似乎都在按预期进行。它允许正确登录和重定向,如果我尝试使用非有效格式的电子邮件地址创建新帐户,它会抛出预期错误。非常感谢你的帮助。我将编辑答案以包含此信息,然后将其标记为已回答。
Rails.application.routes.draw do
resources :cvs
devise_for :users
resources :agents
resources :jobs
root to: "jobs#index"
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end
Devise.setup do |config|
config.mailer_sender = 'please-change-me-at-config-initializers-devise@example.com'
require 'devise/orm/active_record'
config.authentication_keys = [:login]
config.case_insensitive_keys = [:email, :username]
config.strip_whitespace_keys = [:email, :username]
config.skip_session_storage = [:http_auth]
config.stretches = Rails.env.test? ? 1 : 11
config.send_email_changed_notification = true
config.send_password_change_notification = true
config.reconfirmable = true
config.confirmation_keys = [ :username ]
config.expire_all_remember_me_on_sign_out = true
config.password_length = 6..128
config.email_regexp = /\A[^@\s]+@[^@\s]+\z/
config.lock_strategy = :none
config.reset_password_keys = [ :username ]
config.reset_password_within = 6.hours
config.sign_out_via = :delete
end
source 'https://rubygems.org'
git_source(:github) do |repo_name|
repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?('/')
"https://github.com/#{repo_name}.git"
end
gem 'aws-sdk-rails', '~> 2.0', '>= 2.0.1'
gem 'bootstrap-sass', '~> 3.3', '>= 3.3.7'
gem 'cancancan', '~> 2.1', '>= 2.1.3'
gem 'coffee-rails', '~> 4.2'
gem 'country_select', '~> 3.1', '>= 3.1.1'
gem 'devise', '~> 4.4', '>= 4.4.1'
gem 'haml-rails', '~> 1.0'
gem 'jbuilder', '~> 2.5'
gem 'jquery-rails', '~> 4.3', '>= 4.3.1'
gem 'simple_form', '~> 3.5'
gem "paperclip", "~> 5.2.1"
gem 'pg', '~> 0.18'
gem 'puma', '~> 3.7'
gem 'rails', '~> 5.1.4'
gem 'sass-rails', '~> 5.0'
gem 'turbolinks', '~> 5'
gem 'uglifier', '>= 1.3.0'
gem 'validates_timeliness', '~> 4.0', '>= 4.0.2'
group :development, :test do
gem 'byebug', platforms: %i[mri mingw x64_mingw]
gem 'capybara', '~> 2.13'
gem 'selenium-webdriver'
end
group :development do
gem 'web-console', '>= 3.3.0'
gem 'listen', '>= 3.0.5', '< 3.2'
gem 'spring'
gem 'spring-watcher-listen', '~> 2.0.0'
end
class User < ApplicationRecord
has_one :cv
has_many :educations, through: :cvs, inverse_of: :user
has_many :languages, through: :cvs, inverse_of: :user
has_many :jobs
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
validates :username, presence: true, uniqueness: { case_sensitive: false }, length: { in: 4..50 }
validates_format_of :username, with: /^[a-zA-Z0-9_\.]*$/, multiline: true
validates :email, presence: true, uniqueness: { case_sensitive: false }
validates_format_of :email, with: /[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}/, multiline: true
validate :validate_username
attr_accessor :login
def self.find_first_by_auth_conditions(warden_conditions)
conditions = warden_conditions.dup
if login = conditions.delete(:login)
where(conditions).where(['lower(username) = :value OR lower(email) = :value', { value: login.downcase }]).first
else
if conditions[:username].nil?
where(conditions).first
else
where(username: conditions[:username]).first
end
end
end
def validate_username
errors.add(:username, :invalid) if User.where(email: username).exists?
end
end
def after_sign_in_path_for(resource)
root_path
end
...
1m[35m (0.3ms)[0m [1m[35mBEGIN[0m
[1m[36mUser Exists (0.7ms)[0m [1m[34mSELECT 1 AS one FROM "users" WHERE LOWER("users"."username") = LOWER($1) AND ("users"."id" != $2) LIMIT $3[0m [["username", "josh"], ["id", 1], ["LIMIT", 1]]
[1m[36mUser Exists (0.5ms)[0m [1m[34mSELECT 1 AS one FROM "users" WHERE LOWER("users"."email") = LOWER($1) AND ("users"."id" != $2) LIMIT $3[0m [["email", "joshuaikesling@gmail.com"], ["id", 1], ["LIMIT", 1]]
[1m[36mUser Exists (0.5ms)[0m [1m[34mSELECT 1 AS one FROM "users" WHERE "users"."email" = $1 LIMIT $2[0m [["email", "josh"], ["LIMIT", 1]]
[1m[35m (0.3ms)[0m [1m[31mROLLBACK[0m
Rendering devise/sessions/new.html.haml within layouts/application
...
def configure_permitted_parameters
added_attrs = [:username, :email, :password, :password_confirmation, :remember_me, :admin]
devise_parameter_sanitizer.permit :sign_up, keys: added_attrs
devise_parameter_sanitizer.permit :account_update, keys: added_attrs
end