2012-04-02 13 views
6

मैं एक रेल 3.0 अनुप्रयोग विकसित कर रहा हूं और पंजीकरण के प्रमाणीकरण के लिए OmniAuth + पहचान का उपयोग कर रहा हूं। मैंने एक उपयोगकर्ता मॉडल लागू किया है जो एक विदेशी कुंजी के माध्यम से पहचान मॉडल से जुड़ा हुआ है और सब कुछ ठीक से काम कर रहा है। अब, मैं एक भूल गए पासवर्ड सुविधा को लागू करना चाहता हूं।OmniAuth + पहचान पासवर्ड भूल गए

उपयोगकर्ता के ईमेल को देखते हुए, मैं उन्हें उनके पासवर्ड को रीसेट करने के लिए एक लिंक के साथ एक ईमेल भेजना चाहता हूं। ईमेल में एक यादृच्छिक हेक्स स्ट्रिंग है जो उपयोगकर्ता से जुड़ी है।

अब, मैं उपयोगकर्ता के पहचान पासवर्ड को कैसे रीसेट करूं?

पहचान डेटाबेस तालिका में, यह पासवर्ड_डिजिस्ट के रूप में संग्रहीत है। क्या मैं इसे अभी ओवरराइट कर सकता हूं?

उत्तर

4

तो यह पता चला कि यह इतना आसान है। पहचान तालिका में मौजूदा पासवर्ड_डिजिस्ट को बस ओवरराइट करें। password_digest बनाने के लिए BCrypt पुस्तकालय का उपयोग करें:

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

यह करें:

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

में एक omniauth-पहचान के issue, wdspkr कहते हैं:

एक बार जब आप समझते हैं omniauth-पहचान है कि ActiveModel के SecurePassword का उपयोग करके इसे हल करना वास्तव में आसान है। पासवर्ड_डिजिस्ट सेट करने के बजाय आप बस पासवर्ड और पासवर्ड_ कॉन्फ़िगरेशन और अपडेट सेट करें।

संबंधित मुद्दे