设计错误:已经采用了身份验证令牌

时间:2015-06-30 16:48:04

标签: ruby-on-rails ruby-on-rails-4 devise

尝试在我的RoR webapp中注册,向我提供设计消息"已经采用了Auth令牌" 此外,webapp有一个API并且工作正常,没有给出任何消息,这只有在我尝试使用HTML视图时才会发生。

user_controller.rb

before_action :set_user, only: [:show, :edit, :update, :destroy]

# DELETE /users/:id.:format
  def destroy
    # authorize! :delete, @user
    @user.destroy
    respond_to do |format|
      format.html { redirect_to root_url }
    end
  end

  private
    def set_user
      @user = User.find(params[:id])
    end

    def user_params
      accessible = [ :name, :email ]
      accessible << [ :password, :password_confirmation ] unless params[:user][:password].blank?
      params.require(:user).permit(accessible)
    end

User.rb

  validates :auth_token, uniqueness: true
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable
  before_create :generate_authentication_token!
  def generate_authentication_token!
    begin
      self.auth_token = Devise.friendly_token
    end while self.class.exists?(auth_token: auth_token)
  end

日志

Started GET "/users/sign_up" for 127.0.0.1 at 2015-06-30 09:31:46 -0500
Processing by Devise::RegistrationsController#new as HTML
  Rendered devise/registrations/new.html.haml within layouts/application (12.9ms)
  User Load (0.3ms)  SELECT  "users".* FROM "users" WHERE "users"."deleted_at" IS NULL AND "users"."auth_token" IS NULL LIMIT 1
  Rendered layouts/_navigation_links.html.haml (2.1ms)
  Rendered layouts/_navigation.html.haml (3.4ms)
  Rendered layouts/_messages.html.haml (0.2ms)
Completed 200 OK in 132ms (Views: 117.0ms | ActiveRecord: 1.5ms)


Started POST "/users" for 127.0.0.1 at 2015-06-30 09:32:00 -0500
Processing by Devise::RegistrationsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"20w9AXmACwggvPocKfLBdrxQRasT5OiaC7niuzooBBm3BAp8xkN6VLWyxZLRoLIpFPEIIdkxZRd9CCwsJxkeUA==", "user"=>{"email"=>"hola@x.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Sign up"}
   (0.1ms)  BEGIN
  User Exists (0.4ms)  SELECT  1 AS one FROM "users" WHERE "users"."auth_token" = '' LIMIT 1
  User Exists (0.3ms)  SELECT  1 AS one FROM "users" WHERE "users"."email" = 'hola@x.com' LIMIT 1
   (0.1ms)  ROLLBACK
  Rendered devise/registrations/new.html.haml within layouts/application (3.2ms)
  User Load (0.3ms)  SELECT  "users".* FROM "users" WHERE "users"."deleted_at" IS NULL AND "users"."auth_token" IS NULL LIMIT 1
  Rendered layouts/_navigation_links.html.haml (1.5ms)
  Rendered layouts/_navigation.html.haml (2.1ms)
  Rendered layouts/_messages.html.haml (0.2ms)
Completed 200 OK in 232ms (Views: 134.4ms | ActiveRecord: 1.2ms)


Started GET "/assets/jquery/jquery-bb5529929fa5581a780a38ecb7470f2c.js?body=1" for 127.0.0.1 at 2015-06-30 09:32:00 -0500

2 个答案:

答案 0 :(得分:2)

请按照以下说明操作 1)打开Rails控制台

rails console

2)获取用户总数

user = User.all
user.count

这应该是1

3)获取用户并检查身份验证令牌

user = User.last
user.auth_token

auth令牌将是一个空字符串,这是您的命令失败的原因,因为用户没有有效的身份验证令牌

4)为用户创建有效的身份验证令牌

user.auth_token = Devise.friendly_token
user.save

它会为用户创建一个有效的身份验证令牌并保存

5)现在你可以运行你的命令,它可以完美地运行

干杯! :)

答案 1 :(得分:0)

这可能是因为你的数据库中已有用户没有auth_token, 使用Devise.friendly_token通过令牌

更新这些用户