2012-04-02 17 views
6

Zajmuję się tworzeniem aplikacji Rails 3.0 i używam OmniAuth + Tożsamość do uwierzytelniania rejestracji. Wdrożyłem model użytkownika, który jest powiązany z modelem tożsamości za pomocą klucza obcego i wszystko działa dobrze. Teraz chcę zaimplementować funkcję nie pamiętam hasła.OmniAuth + Tożsamość Zapomniałem hasła

Biorąc pod uwagę adres e-mail użytkownika, chcę wysłać mu wiadomość e-mail z linkiem do zresetowania hasła. Wiadomość e-mail zawiera losowy ciąg szesnastkowy skojarzony z użytkownikiem.

Jak zresetować hasło tożsamości użytkownika?

W tabeli bazy danych tożsamości jest przechowywany jako hasło_digest. Czy mogę to po prostu zastąpić?

Odpowiedz

4

Okazuje się, że to takie proste. Wystarczy nadpisać istniejące hasło_digest w tabeli tożsamości. Korzystania z biblioteki BCrypt stworzyć 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 
10

Wykonaj:

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

w A omniauth-tożsamość użytkownika issue, wdspkr powiedzieć:

Kiedy zrozumiesz, że omniauth-tożsamość jest używając ActiveModel's SecurePassword, bardzo łatwo to rozwiązać. Zamiast ustawiać password_digest po prostu ustawić hasło i password_confirmation oraz aktualizację .

Powiązane problemy