Ruby on rails Desive在登录后未将用户发送到root

Ruby 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

designe的默认行为应该是在登录后将用户发送到根路径。我的是没有做到这一点,而是简单地呈现登录页面再次。它正在让用户登录。它只是没有正确地重定向

development.log(带有显示用户操作的注释) sessions/new.html.haml 应用程序\u controller.rb 初始值设定人/designe.rb Gemfile
源代码'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