Как перенаправить на страницу входа / или сделать вход пользователя успешным после подтверждения электронной почты в авторизации токена устройства

Я использую аутентификацию токена разработки с интерфейсом React, и теперь я делаю подтверждение пользователя по электронной почте. Электронное письмо отправляется, но каким-то образом создается неправильный URL-адрес.

Создаваемый URL-адрес:.

http://localhost:3001/auth/confirmation.4?confirmation_token=AoWH2yYxuHHnBzJRF746

Мои маршруты.

new_user_confirmation GET      /auth/confirmation/new(.:format)                                                         users/confirmations#new
                    user_confirmation GET      /auth/confirmation(.:format)                                                             users/confirmations#show
                                      POST     /auth/confirmation(.:format)                                                             users/confirmations#create

Мое приложение / views / devise / mailer / confirm_instructions.html.erb

<p>Welcome <%= @email %>!</p>

<p>You can confirm your account email through the link below:</p>

<p><%= link_to 'Confirm my account', user_confirmation_url(confirmation_token: @token) %></p>

После нажатия кнопки «Подтвердить мою учетную запись» я успешно перехожу к моему приложению, но с неправильным URL-адресом. Буду рад, если добьюсь одного из следующих результатов.

  1. Пользователь автоматически входит в систему после подтверждения.
  2. Он переходит на страницу входа после подтверждения учетной записи, после чего он дает вам учетные данные и логин.

Для 1 я переопределил Confirmations_controller.rb как.

# frozen_string_literal: true

class Users::ConfirmationsController < Devise::ConfirmationsController
  # The path used after confirmation.
   def after_confirmation_path_for(resource_name, resource)
     sign_in(resource) # In case you want to sign in the user
     root_path
   end
end

В routes.rb

mount_devise_token_auth_for 'User', at: 'auth', controllers: { confirmations: 'users/confirmations' }

person Salman Haseeb Sheikh    schedule 10.04.2020    source источник


Ответы (1)


Во-первых, помощнику URL-адреса, который вы используете в электронном письме, не нужно получать @resource - поэтому он генерирует URL-адрес с .4. Скорее должно быть

<p><%= link_to 'Confirm my account', user_confirmation_url(confirmation_token: @token) %></p

Во-вторых, согласно этому руководству, вы можете перенаправить пользователя после подтверждения, как вы уже пробовали. https://github.com/heartcombo/devise/wiki/How-To:-Add-:confirmable-to-Users#redirecting-user

Просто укажите путь в своем приложении после того, как вы вошли в систему

def after_confirmation_path_for(resource_name, resource)
  sign_in(resource) # In case you want to sign in the user
  your_new_after_confirmation_path
end

Поэтому не нужно снова переходить в session_new после входа в систему.

person Clara    schedule 10.04.2020
comment
Спасибо за помощь. На самом деле я обновил свой вопрос вашим ответом. Не работает. Фактически это даже не дошло до контролера подтверждений. Я пробовал с byebug. Не понимаю почему. - person Salman Haseeb Sheikh; 10.04.2020
comment
Даже не входя в систему. - person Salman Haseeb Sheikh; 10.04.2020
comment
И при тестировании с byebug вы по крайней мере приехали в правильный контроллер? В учебном курсе они используют другой маршрут devise_for :users, controllers: { confirmations: 'confirmations' } - person Clara; 10.04.2020
comment
В моем случае это mount_devise_token_auth_for 'User', at: 'auth', controllers: { confirmations: 'users/confirmations' }, но это даже не останавливается на byebug. Не понимаю почему. - person Salman Haseeb Sheikh; 11.04.2020
comment
Это означает, что вы даже не попали в контроллер. Измените маршрут на этот: devise_for :users, controllers: { confirmations: 'users/confirmations' } - person Clara; 11.04.2020
comment
На самом деле я использую devise_token_auth. - person Salman Haseeb Sheikh; 11.04.2020