Rails devise-jwt gem не обновляет jti у пользователя после входа в систему? - PullRequest
0 голосов
/ 01 июня 2018

У меня есть простое приложение rails с devise и devise-jwt.У меня есть логин / выход из системы и т. Д., Все они работают с User как моя единственная область.Но я не могу заставить драгоценный камень обновить атрибут jti на модели после входа в систему.

Я ожидал, что гем автоматически сделает это, но он никогда не обновит jti.

class User < ApplicationRecord
  include Devise::JWT::RevocationStrategies::JTIMatcher

  devise :database_authenticatable,
     :recoverable, :trackable, :validatable,
     :jwt_authenticatable, jwt_revocation_strategy: self

  def jwt_payload
    super.merge({ custom: 'data' })
  end

В моей миграции пользователей у меня есть правильный t.string :jti с индексом add_index :users, :jti, unique: true.

Нужно ли вручную связываться с обратным вызовом для входа в систему, чтобы получить jti для обновления?(кажется странным с Devise::JWT::RevocationStrategies::JTIMatcher, включенным в модель)

1 Ответ

0 голосов
/ 01 июня 2018

Я получил его на работу вручную.Пришлось сделать это к обновлению:

  # user.rb
  def jwt_payload
    self.jti = self.class.generate_jti
    self.save

    # super isn't doing anything useful, but if the gem updates i'll want it to be safe
    super.merge({
      jti: self.jti,
      usr: self.id,
      ...
    })
  end

Я прочитал https://github.com/waiting-for-dev/devise-jwt/blob/958cab34287f9985aacc84fedbbb3ea508f6c3b2/lib/devise/jwt/revocation_strategies/jti_matcher.rb, но не могу понять, почему вызов super вернул бы { jti: nil}?

Хотел бычтобы увидеть лучший метод.

...