Ich versuche, in einem vorhandenen Benutzer anmelden mit devise_token_auth
Version 0.1.38
, aber ich bin ein IndexError: string not matched
in der Bibliothek sessions_controller
schlagen.devise_token_auth & Rails 5 - Indexerror: string abgestimmt nicht
IndexError (string not matched):
devise_token_auth (0.1.38) app/controllers/devise_token_auth/sessions_controller.rb:37:in `[]='
devise_token_auth (0.1.38) app/controllers/devise_token_auth/sessions_controller.rb:37:in `create'
actionpack (5.0.0) lib/action_controller/metal/basic_implicit_render.rb:4:in `send_action'
actionpack (5.0.0) lib/abstract_controller/base.rb:188:in `process_action'
actionpack (5.0.0) lib/action_controller/metal/rendering.rb:30:in `process_action'
actionpack (5.0.0) lib/abstract_controller/callbacks.rb:20:in `block in process_action'
Der entsprechende Code aus sessions_controller
ist:
if @resource and valid_params?(field, q_value) and @resource.valid_password?(resource_params[:password]) and ([email protected]_to?(:active_for_authentication?) or @resource.active_for_authentication?)
# create client id
@client_id = SecureRandom.urlsafe_base64(nil, false)
@token = SecureRandom.urlsafe_base64(nil, false)
# !! Next line is line 37 with the error !!
@resource.tokens[@client_id] = {
token: BCrypt::Password.create(@token),
expiry: (Time.now + DeviseTokenAuth.token_lifespan).to_i
}
@resource.save
sign_in(:user, @resource, store: false, bypass: false)
I devise_token_auth
zu einem bestehenden Projekt hinzugefügt haben, so dass es sehr gut möglich, dass ich schlechte Daten in der tokens
Spalte erstellt haben. Ich habe verschiedene Möglichkeiten ausprobiert token
json in meine vorhandenen Benutzer einschließlich des Imitierens des Codes in sessions_controller
.
add_column :users, :tokens, :json, null: false, default: {}
User.reset_column_information
client_id = SecureRandom.urlsafe_base64(nil, false)
token = SecureRandom.urlsafe_base64(nil, false)
User.find_each do |user|
user.uid = user.email
user.provider = 'email'
user.tokens[client_id] = {
token: BCrypt::Password.create(token),
expiry: (Time.now + DeviseTokenAuth.token_lifespan).to_i
}
user.save!
end
Ich habe einen Hinweis in issue #101 gesehen, aber das hat nicht eine bestimmte Auflösung hat. Irgendeine Idee, wo ich falsch liege?
Für mich scheint dies nur passieren, wenn ich meine Rails App auf Heroku laufen. Meine lokale Instanz hat dieses Problem nicht. Ich habe bemerkt, dass sich meine Postgres-Version (9.6.2) lokal von der Heroku-Version (9.6.4) unterscheidet. Nicht sicher, ob das das Problem verursacht oder nicht –