OmniAuth + личность забыли пароль - PullRequest
6 голосов
/ 03 апреля 2012

Я занимаюсь разработкой приложения на Rails 3.0 и использую OmniAuth + Identity для аутентификации при регистрации.Я реализовал модель User, которая привязана к модели Identity через внешний ключ, и все работает хорошо.Теперь я хочу реализовать функцию забытого пароля.

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

Теперь, как мне сбросить пароль пользователя?

В таблице базы данных Identity она хранится как password_digest.Могу я просто перезаписать это?

Ответы [ 2 ]

10 голосов
/ 12 ноября 2012

Сделайте это:

@identity = Identity.find(1)
@identity.password = "newpassword"
@identity.password_confirmation = "newpassword"
@identity.save

В выпуске omniauth-удостоверения , wdspkr произнесите:

Как только вы поймете, чтоomniauth-identity использует SecurePassword ActiveModel, это действительно легко решить.Вместо установки password_digest вы просто устанавливаете пароль и password_confirmation и обновляете.

4 голосов
/ 03 апреля 2012

Так что получается, что это так просто.Просто перезапишите существующий password_digest в таблице Identity.Используйте библиотеку BCrypt для создания password_digest:

require 'bcrypt'
...
class UsersController < ApplicationController
  ...
  def update
    @user = User.find(params[:id])
    ...
    user_identity = Identity.find_by_email(@user.email)
    unencrypted_password = params[:user][:password].to_s
    password_digest = BCrypt::Password.create(unencrypted_password)
    user_identity.password_digest = password_digest;
    user_identity.save!
  end
end
...