Ruby on rails 没有创建用户会话,知道为什么没有吗?

Ruby on rails 没有创建用户会话,知道为什么没有吗?,ruby-on-rails,ruby,session,devise,Ruby On Rails,Ruby,Session,Devise,我正在使用定制的Desive sessions controller来管理我的用户会话,但无论何时我尝试以现有用户身份登录,我的登录功能都不起作用,它只返回登录表单,服务器返回以下消息: Started POST "/users/sign_in" for 127.0.0.1 at 2015-10-27 13:19:46 +0200 ActiveRecord::SchemaMigration Load (0.4ms) SELECT "schema_migrations".* FROM "sche

我正在使用定制的Desive sessions controller来管理我的用户会话,但无论何时我尝试以现有用户身份登录,我的登录功能都不起作用,它只返回登录表单,服务器返回以下消息:

Started POST "/users/sign_in" for 127.0.0.1 at 2015-10-27 13:19:46 +0200
ActiveRecord::SchemaMigration Load (0.4ms)  SELECT "schema_migrations".* FROM "schema_migrations"
Processing by Users::SessionsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"lLtGottAklgEmCS2Y04FFZw3vAtd6EHkKOQMBCOJ4B6yeuFvN34j4OhYz9vd0SzW+gAwCI7GobMs20ubug24Fw==", "user"=>{"cell_number"=>"0798900606", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Log in"}
User Load (0.6ms)  SELECT  "users".* FROM "users" WHERE "users"."cell_number" = $1 LIMIT 1  [["cell_number", "0798900606"]]
Completed 401 Unauthorized in 45ms (ActiveRecord: 2.5ms)
Processing by Users::SessionsController#new as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"lLtGottAklgEmCS2Y04FFZw3vAtd6EHkKOQMBCOJ4B6yeuFvN34j4OhYz9vd0SzW+gAwCI7GobMs20ubug24Fw==", "user"=>{"cell_number"=>"0798900606", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Log in"}
Rendered users/sessions/new.html.slim within layouts/application (60.1ms)
Rendered application/_analytics.html.slim (4.7ms)
Rendered application/_environment_indicator.html.slim (2.5ms)
Rendered application/_preloader.html.slim (2.4ms)
Rendered application/_flashes.html.slim (3.7ms)
Category Load (0.7ms)  SELECT  "categories".* FROM "categories" WHERE "categories"."uuid" IS NULL LIMIT 1
Completed 200 OK in 746ms (Views: 660.3ms | ActiveRecord: 0.7ms)
我的会话控制器如下所示:

class Users::SessionsController < Devise::SessionsController
before_action :configure_sign_in_parameters

  def new
   super
  end

  def create
   @user = User.find_by(cell_number: params[:user][:cell_number])
  super
  end

  private

  def after_sign_in_path_for(resource)
   root_path
  end

  def configure_sign_in_parameters
   devise_parameter_sanitizer.for(:sign_in).push(:cell_number, :password)
  end

end
Rails.application.routes.draw do

 ### Admin
 devise_for :admin_users, ActiveAdmin::Devise.config
 ActiveAdmin.routes(self)

 ### User
 devise_for :users, controllers: { :registrations => "users/registrations",
                                :sessions => "users/sessions",
                                :passwords => "users/passwords" }

   devise_scope :user do
   namespace :vodacom do
     namespace :users do
       get "/register", to: 'registrations#new'
       get "/create", to: 'registrations#create'
     end
    end
  end
end
h2 Normal Log in

= simple_form_for @user, url: user_session_path(@user) do |f|
  div class="form-inputs"
    = f.input :cell_number, required: true, autofocus: true
    = f.input :password, required: true
    = f.input :remember_me, as: :boolean if devise_mapping.rememberable?

  div class="form-actions"
    = f.button :submit, "Log in"
我的登录表单如下所示:

class Users::SessionsController < Devise::SessionsController
before_action :configure_sign_in_parameters

  def new
   super
  end

  def create
   @user = User.find_by(cell_number: params[:user][:cell_number])
  super
  end

  private

  def after_sign_in_path_for(resource)
   root_path
  end

  def configure_sign_in_parameters
   devise_parameter_sanitizer.for(:sign_in).push(:cell_number, :password)
  end

end
Rails.application.routes.draw do

 ### Admin
 devise_for :admin_users, ActiveAdmin::Devise.config
 ActiveAdmin.routes(self)

 ### User
 devise_for :users, controllers: { :registrations => "users/registrations",
                                :sessions => "users/sessions",
                                :passwords => "users/passwords" }

   devise_scope :user do
   namespace :vodacom do
     namespace :users do
       get "/register", to: 'registrations#new'
       get "/create", to: 'registrations#create'
     end
    end
  end
end
h2 Normal Log in

= simple_form_for @user, url: user_session_path(@user) do |f|
  div class="form-inputs"
    = f.input :cell_number, required: true, autofocus: true
    = f.input :password, required: true
    = f.input :remember_me, as: :boolean if devise_mapping.rememberable?

  div class="form-actions"
    = f.button :submit, "Log in"

知道我做错了什么吗?“我的应用程序控制器”指定在执行任何操作之前应对用户进行身份验证。

我发现我做错了什么,我的用户模型没有电子邮件属性,而是有cell\u number属性。因此,由于我使用Deviate,Deviate默认使用电子邮件作为模型的身份验证密钥。为了解决这个问题,我必须在我的用户模型中指定cell_number作为身份验证密钥:

devise :database_authenticatable,
       :registerable,
       :recoverable, 
       :rememberable,
       :registerable,
       :authentication_keys => [:cell_number]
在45毫秒ActiveRecord中完成401未经授权:2.5毫秒-登录失败。