问题描述
嗨,我遇到的错误类似于此处的一些错误,但我认为根本原因是不同的,因为我发现没有解决方案。基本上,我在一个小项目上使用了Devise in Rails,尽管使用sign_up页面可以很好地工作(将用户放置在数据库中),但sign_in页面似乎可以找到用户,但没有将其设置为当前用户。从现成的解决方案中,我唯一改变的是使用:username作为auth密钥而不是:email。
class ApplicationController < ActionController::Base
protect_from_forgery prepend: true
skip_before_action :verify_authenticity_token
before_action :configure_permitted_parameters,if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up) { |u| u.permit(:username,:email,:password,:password_confirmation) }
devise_parameter_sanitizer.permit(:sign_in) { |u| u.permit(:username,:remember_me) }
devise_parameter_sanitizer.permit(:account_update) { |u| u.permit(:username,:current_password) }
end
end
在我的初始化器/devise.rb中:
config.authentication_keys = [:username]
config.case_insensitive_keys = [:username]
config.strip_whitespace_keys = [:username]
用户模型
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable,:lockable,:timeoutable,:trackable and :omniauthable
devise :database_authenticatable,:registerable,:recoverable,:rememberable,:validatable
def email_required?
false
end
def email_changed?
false
end
def will_save_change_to_email?
false
end
end
,控制台的输出如下所示:
Started POST "/users/sign_in" for ::1 at 2020-08-11 17:12:53 +0100
Processing by Devise::SessionsController#create as HTML
Parameters: {"authenticity_token"=>"EbXx8CI0+FsF1HkNwHqsUW09BJ0HOW2lJDjWmJEc03d0AeaBOWVxNFpupUA+qLKIsiVMZ9kfbmCZidZMZIKoXA==","user"=>{"username"=>"bob","password"=>"[FILTERED]","remember_me"=>"0"},"commit"=>"Log in"}
User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."username" = $1 ORDER BY "users"."id" ASC LIMIT $2 [["username","bob"],["LIMIT",1]]
Redirected to http://localhost:3031/
Completed 302 Found in 103ms (ActiveRecord: 0.4ms | Allocations: 3788)
Started GET "/" for ::1 at 2020-08-11 17:12:53 +0100
Processing by BoardsController#index as HTML
Completed 401 Unauthorized in 0ms (ActiveRecord: 0.0ms | Allocations: 248)
董事会负责人只需:
before_action :authenticate_user!
由于身份验证失败,该页面重定向回sign_in。
感谢您的任何建议!
解决方法
将其放在此处,以防其他人遇到此问题。
如果使用的是Stimulus Reflex,则当前会禁用rails cookie_store,而改用cache_store。您可以切换回去:
config.session_store :cache_store
恢复默认设置
config.session_store :cookie_store
或运行rails dev:cache
在开发环境中启用cache_store。