Почему devise генерирует этот формат URL подтверждения?

Разработать продолжать генерировать этот формат confirmation URL

http://something.com/users/confirmation/divyanshu-rawat?confirmation_token=CV3zV1wAWsb3RokHHEKN

Я не знаю, почему это не генерирует что-то подобное.

http://something.com/users/confirmation?confirmation_token=CV3zV1wAWsb3RokHHEKN

Вот так мой confirmation_instructions.html.haml похоже.

%p Welcome #{@resource.first_name}!
%p You can confirm your account email through the link below:
%p= link_to 'Confirm my account', user_confirmation_url(@resource, :confirmation_token => @resource.confirmation_token)

1 ответ

Решение

В геме Devise маршруты для подтверждения создаются, как показано ниже:

#  # Confirmation routes for Confirmable, if User model has :confirmable configured
#  new_user_confirmation GET    /users/confirmation/new(.:format) {controller:"devise/confirmations", action:"new"}
#      user_confirmation GET    /users/confirmation(.:format)     {controller:"devise/confirmations", action:"show"}
#                        POST   /users/confirmation(.:format)     {controller:"devise/confirmations", action:"create"}

Так что если вы хотите создать как URL,

http://something.com/users/confirmation?confirmation_token=CV3zV1wAWsb3RokHHEKN

использование

user_confirmation_url(confirmation_token: @resource.confirmation_token)`

Вместо

user_confirmation_url(@resource, confirmation_token: @resource.confirmation_token)`

Также проверьте маршруты.rb

Если вы хотите передать атрибут user_name или name db из @resource в URL подтверждения (как вы просили, передавая divyanshu-rawat в своем URL), вы можете создать собственный маршрут, который будет указывать на тот же контроллер и действие, как показано ниже,

  # config/routes.rb
  devise_for :users

  as :user do
    get  '/users/confirmation/:name' => "devise/confirmations#show", as: 'user_confirm'
  end 

И если в вашем случае, @resource.user_name = 'divyanshu-rawat', обновите confirmation_instructions.html.haml как показано ниже,

%p Welcome #{@resource.first_name}!
%p You can confirm your account email through the link below:
%p= link_to 'Confirm my account', user_confirm_url(name: @resource.user_name, confirmation_token: @resource.confirmation_token)

Который будет производить URL, как,

http://something.com/users/confirmation/divyanshu-rawat?confirmation_token=CV3zV1wAWsb3RokHHEKN
Другие вопросы по тегам