9

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

Wilson Varghese
  • 127
  • 1
  • 7
  • 3
    Check that your migration includes the proper column definition, and if not you may need to either rebuild your database, or add a new migration to add that column. – tadman Apr 17 '19 at 22:45
  • thank you, the columns for trackable was not generated in the migration, that was the reason why it was giving me the error, thanks for the help – Wilson Varghese Apr 19 '19 at 16:59

3 Answers3

28

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

olivrg
  • 5,523
  • 3
  • 15
  • 19
2

@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
BillFienberg
  • 879
  • 11
  • 17
1

@olivrg Rails 7 doesn't support t.inet I must use t.string

## Trackable
t.integer  :sign_in_count, default: 0, null: false
t.datetime :current_sign_in_at
t.datetime :last_sign_in_at
t.string   :current_sign_in_ip
t.string   :last_sign_in_ip
Lee Drum
  • 165
  • 6