Ты изобретаешь колесо. У Devise уже есть Приглашающий модуль , который делает то, что вы ищете.
После выполнения инструкций по установке вы просто добавляете ссылку на new_user_invitation_path
, где администраторы могут приглашать других пользователей. Если вы хотите заблокировать приглашения, чтобы только администраторы могли приглашать пользователей, просто настройте контроллер:
class MyInvitationsController < Devise::InvitationsController
before_action :authorize_admin!, only: [:new, :create]
def authorize_admin!
# if you are using Pundit
authorize resource_class, :invite?
# or if you're reinventing the authorization wheel
redirect_to '/somewhere'
end
end
Если вы действительно хотите заново изобрести колесо, сделайте это правильно. Devise не выполняет сброс пароля в Devise::RegistrationsController
- и вы не должны.
Сброс пароля выполняется в Devise::PasswordsController
:
Prefix Verb URI Pattern Controller#Action
new_user_password GET /users/password/new(.:format) devise/passwords#new
edit_user_password GET /users/password/edit(.:format) devise/passwords#edit
user_password PATCH /users/password(.:format) devise/passwords#update
PUT /users/password(.:format) devise/passwords#update
POST /users/password(.:format) devise/passwords#create
Ссылка в электронном письме для сброса пароля /users/password/edit
, Который вы можете увидеть в электронной почте .
edit_password_url(@resource, reset_password_token: @token)