Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NoMethodError: undefined method `current_sign_in_at' for #User:0x000055ce01dcf0a8 by using Devise_token_auth rails gem is not working

NoMethodError: undefined method `current_sign_in_at' for #User:0x000055ce01dcf0a8

I think it is a session method error of some sort

I have an angular6 app for frontend and rails for backend, so the best option for me was to opt for devise_token_auth and ng_token_auth for user authentication.

I installed devise_token_auth gem followed by executing this line of code in terminal

"rails generate devise_token_auth:install User auth"

and on migration there was an error, I solved the issue by adding

"extend Devise::Models"

to the USER model and then migration had worked, then I created a user in the backend and tried to call sign_in using postman and the error "NoMethodError: undefined method `current_sign_in_at' for #User:0x000055ce01dcf0a8" came

I want the user to get authenticated using this gem or some other gem if they exist

like image 901
Wilson Varghese Avatar asked Apr 17 '19 21:04

Wilson Varghese


2 Answers

I had this issue recently and it turns out I didn't have the trackable fields in my migration. There are two ways to fix this:

Option one. Add a new migration that adds the trackable fields to User

## Trackable
t.integer  :sign_in_count, default: 0, null: false
t.datetime :current_sign_in_at
t.datetime :last_sign_in_at
t.inet     :current_sign_in_ip
t.inet     :last_sign_in_ip

Run rake db:migrate

The second option: run a down migration

Start with this command - add your migration version number

rake db:migrate:down VERSION=xxxxxxxxxxxxxx

You should then be able to add the trackable fields to the migration file and then run

rake db:migrate up VERSION=xxxxxxxxxxxxxx

Run rake db:migrate

like image 143
olivrg Avatar answered Dec 28 '22 06:12

olivrg


@olivrg's suggestion to run a migration to add the trackable fields to the User model worked for me.

My migration looked like this:

class AddTrackableFieldsToUser < ActiveRecord::Migration[6.0]
  def change
    change_table :users do |t|
      t.integer  :sign_in_count, default: 0, null: false
      t.datetime :current_sign_in_at
      t.datetime :last_sign_in_at
      t.inet     :current_sign_in_ip
      t.inet     :last_sign_in_ip
    end
  end
end
like image 22
BillFienberg Avatar answered Dec 28 '22 08:12

BillFienberg