![](/img/trans.png)
[英]Authlogic and functional tests - Authlogic::Session::Activation::NotActivatedError: You must activate
[英]Authlogic::Session::Activation::NotActivatedError
使用 authlogic gem 驗證用戶在瀏覽器中的登錄,但得到“您的帳戶處於非活動錯誤”我已經嘗試了我可以通過 web 找到的所有解決方案,但它們似乎都不起作用。
在創建 Z21D6F40CFB511982E4424E0E2 之前調用命令Authlogic::Session::Base.controller = Authlogic::ControllerAdapters::RailsAdapter.new(controller)
irb
可以解決問題。
在UserSessionsController
中執行相同的操作可以讓您到達任何地方。 我嘗試在UserSessionsController
中調用before_action:activate_authlogic
,而將所述 function 的定義放在application_controller.rb
這是我的代碼
class UserSessionsController < ApplicationController
def new
@user_session = UserSession.new
end
def create
@user_session = UserSession.new(user_session_params.to_h)
if @user_session.save
redirect_to root_url
else
render :action => :new
end
end
def destroy
current_user_session.destroy
redirect_to new_user_session_url
end
private
def user_session_params
params.require(:user_session).permit(:login, :password, :remember_me)
end
end
class UserSession < Authlogic::Session::Base
end
class ApplicationController < ActionController::Base
helper_method :current_user_session, :current_user
private
def current_user_session
return @current_user_session if defined?(@current_user_session)
@current_user_session = UserSession.find
end
def current_user
return @current_user if defined?(@current_user)
@current_user = current_user_session && current_user_session.user
end
# def activate_authlogic
# Authlogic::Session::Base.controller = Authlogic::ControllerAdapters::RailsAdapter.new(self)
# end
end
class User < ApplicationRecord
has_one :user_profile
acts_as_authentic do |c|
c.crypto_provider = ::Authlogic::CryptoProviders::SCrypt
end
validates :email,
format: {
with: /@/,
message: "should look like an email address."
},
length: { maximum: 100 },
uniqueness: {
case_sensitive: false,
if: :will_save_change_to_email?
}
validates :login,
format: {
with: /\A[a-z0-9]+\z/,
message: "should use only letters and numbers."
},
length: { within: 8..100 },
uniqueness: {
case_sensitive: false,
if: :will_save_change_to_login?
}
validates :password,
confirmation: { if: :require_password? },
length: {
minimum: 8,
if: :require_password?
}
validates_presence_of :password_confirmation
length: {
minimum: 8,
if: :require_password?
}
end
以防萬一
Rails.application.routes.draw do
# For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
root "home_page#index"
get "/home", to: "home_page#index"
resources :users do
resource :user_profile
end
resource :user_session
end
我確實認為這是一個錯誤,所以我將 authlogic gem 從6.4.0更新到6.4.1 。 不用說它也沒有幫助。
這是
source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
ruby '2.7.2'
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '~> 6.1.1'
# Use postgresql as the database for Active Record
gem 'pg', '~> 1.1'
# Use Puma as the app server
gem 'puma', '~> 5.0'
# Use SCSS for stylesheets
gem 'sass-rails', '>= 6'
# Transpile app-like JavaScript. Read more: https://github.com/rails/webpacker
gem 'webpacker', '~> 5.0'
# Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks
gem 'turbolinks', '~> 5'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.7'
# Use Redis adapter to run Action Cable in production
# gem 'redis', '~> 4.0'
# Use Active Model has_secure_password
# gem 'bcrypt', '~> 3.1.7'
gem 'authlogic'
# Use Active Storage variant
# gem 'image_processing', '~> 1.2'
# Reduces boot times through caching; required in config/boot.rb
gem 'bootsnap', '>= 1.4.4', require: false
gem "scrypt", "~> 3.0"
group :development, :test do
# Call 'byebug' anywhere in the code to stop execution and get a debugger console
gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
end
group :development do
# Access an interactive console on exception pages or by calling 'console' anywhere in the code.
gem 'web-console', '>= 4.1.0'
# Display performance information such as SQL time and flame graphs for each request in your browser.
# Can be configured to work on production as well see: https://github.com/MiniProfiler/rack-mini-profiler/blob/master/README.md
gem 'rack-mini-profiler', '~> 2.0'
gem 'rspec-rails', '~> 4.0.2'
gem 'capybara'
end
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
<%= form_for @user_session, url: user_session_url do |f| %>
<% if @user_session.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@user_session.errors.count, "error") %> prohibited:</h2>
<ul>
<% @user_session.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<%= f.label :login %><br />
<%= f.text_field :login %><br />
<br />
<%= f.label :password %><br />
<%= f.password_field :password %><br />
<br />
<%= f.label :remember_me %><br />
<%= f.check_box :remember_me %><br />
<br />
<%= f.submit "Login" %>
<% end %>
class CreateUsers < ActiveRecord::Migration[6.1]
def change
create_table :users do |t|
# Authlogic::ActsAsAuthentic::Email
t.string :email
t.index :email, unique: true
# Authlogic::ActsAsAuthentic::Login
t.string :login
# Authlogic::ActsAsAuthentic::Password
t.string :crypted_password
t.string :password_salt
# Authlogic::ActsAsAuthentic::PersistenceToken
t.string :persistence_token
t.index :persistence_token, unique: true
# Authlogic::ActsAsAuthentic::SingleAccessToken
t.string :single_access_token
t.index :single_access_token, unique: true
# Authlogic::ActsAsAuthentic::PerishableToken
t.string :perishable_token
t.index :perishable_token, unique: true
# See "Magic Columns" in Authlogic::Session::Base
t.integer :login_count, default: 0, null: false
t.integer :failed_login_count, default: 0, null: false
t.datetime :last_request_at
t.datetime :current_login_at
t.datetime :last_login_at
t.string :current_login_ip
t.string :last_login_ip
# See "Magic States" in Authlogic::Session::Base
t.boolean :active, default: false
t.boolean :approved, default: false
t.boolean :confirmed, default: false
t.timestamps
end
end
end
Your account in not active error
,這是因為您的遷移文件添加了Magic States
字段:
# See "Magic States" in Authlogic::Session::Base
t.boolean :active, default: false
t.boolean :approved, default: false
t.boolean :confirmed, default: false
這意味着您必須先將這些字段設置為true
,然后才能登錄用戶。
因此,如果您不需要它們,您可以在新遷移中刪除這些字段。
def change
change_table :users do |t|
t.remove :title, :active
t.remove :title, :approved
t.remove :title, :confirmed
end
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.