Rails 4 + Devise Invitable: сброс пароля

У меня есть пользовательский индекс, и я хочу добавить кнопку, которая отправляла бы электронное письмо для сброса пароля, когда я нажимаю на нее (когда пользователи теряют свое приглашение).

# View
<% @users.each do |user| %>
    <%= link_to "Reset Password", reset_password_path(user) %> 
<% end %>

# Controller
def reset_password
    @user = User.find(params[:id])
    email = @user.email

    # Fire password reset...

    redirect_to users_path
end

Обычно Devise использует форму для сброса пароля, но я решил, что могу переопределить это, поскольку адрес электронной почты известен и может быть указан в параметрах.


person Jeremy Thomas    schedule 12.04.2017    source источник


Ответы (1)


Вы можете сделать что-то подобное и использовать существующие методы Devise из документации: https://github.com/plataformatec/devise/wiki/How-To:-Mass-password-reset-and-email-notification.

def reset_password
 #Generate random, long password that the user will never know:
 new_password = Devise.friendly_token(length = 50)

 @user = User.find(params[:id])
 @user.reset_password(new_password, new_password)

 #Send instructions so user can enter a new password:
 @user.send_reset_password_instructions

 redirect_to users_path
end
person jdgray    schedule 12.04.2017
comment
Единственная проблема в том, что он подписывает меня после того, как отправит электронное письмо. Есть ли что-нибудь вокруг этого? - person Jeremy Thomas; 12.04.2017
comment
Я предполагаю, что это из-за этой строки: @user.reset_password(new_password, new_password). Потому что пароль пользователя меняется и создается новый сеанс. Вы, вероятно, могли бы пропустить эту строку и просто использовать send_reset_password_instructions. На мой взгляд, это, вероятно, должно быть сделано через панель администратора пользователем с правами администратора. - person jdgray; 12.04.2017
comment
это делает администратор, для нетекущего пользователя - person Jeremy Thomas; 12.04.2017