2015-06-08 11 views
6

मैं एक ऐप विकसित करने के लिए लार्वेल 5 का उपयोग कर रहा हूं जो प्रत्येक उपयोगकर्ता को अपनी प्रोफ़ाइल अपडेट करने की अनुमति देता है। पासवर्ड अपडेट करने के लिए
, उपयोगकर्ता को पहले अपना पुराना पासवर्ड दर्ज करना होगा और यदि पुराना पासवर्ड मेल खाता है तो उसका नया दर्ज पासवर्ड डीबी में धोया और संग्रहीत किया जाएगा। लार्वेल फॉर्म अनुरोध सत्यापन का उपयोग करके, मैं इसे कैसे सत्यापित कर सकता हूं?लार्वेल 5, उपयोगकर्ता का पासवर्ड अपडेट करें

+0

शायद इस सवाल का डुप्लिकेट। इस लिंक http://stackoverflow.com/questions/28399899/laravel-update-password-passes-validation-but-doesnt-update-record – HawkEye

+0

मैं, कहा है कि कैसे अद्यतन परिदृश्य के दौरान उपयोगकर्ता पासवर्ड मान्य करने के लिए संदर्भ लें, लार्वा फॉर्म अनुरोध सत्यापन का उपयोग करके, इसे मैन्युअल रूप से नियंत्रक कार्यों में नहीं कर रहा है। – Salar

उत्तर

4

मैंने एक कस्टम सत्यापनकर्ता बनाया और इसे जोड़ा इस तरह AppServiceProvider:

<?php 

namespace App\Providers; 

use Validator; 
use Illuminate\Support\ServiceProvider; 
use Illuminate\Support\Facades\Hash ; 
class AppServiceProvider extends ServiceProvider 
{ 
    /** 
    * Bootstrap any application services. 
    * 
    * @return void 
    */ 
    public function boot() 
    { 
     Validator::extend('password_hash_check', function($attribute, $value, $parameters, $validator) { 
      return Hash::check($value , $parameters[0]) ; 
     }); 
    } 

तो मैं इसे अपने प्रपत्र अनुरोध सत्यापनकर्ता में इस तरह का प्रयोग किया:

<?php 
namespace App\Http\Requests; 
use App\Http\Requests\Request; 
class UpdateUserProfileRequest extends Request 
{ 
    /** 
    * Get the validation rules that apply to the request. 
    * 
    * @return array 
    */ 
    public function rules() 
    { 
     $hashed_password = $this->user()->password ; 
     return [ 
      'oldPassword'=> "password_hash_check:$hashed_password|string|min:6", 
      'newPassword' => 'required_with:oldPassword|confirmed|min:6', 
     ]; 
    } 
3

आप द्वारा

Hash::make() 

उत्पन्न आप

Hash::check('unhashed', $hashed) 

हर बार जब आप Hash::make('string') चलाने के लिए, एक अलग हैश किया जाता है उपयोग करने की आवश्यकता है और पिछले एक से मेल नहीं खाएगी एक हैश्ड मूल्य जाँच करना चाहते हैं जब । उदाहरण के लिए:

// Generate a hash 
$password = Hash::make('password'); 

// $password == $2y$08$T9r9qUxrr6ejs9Ne.nLzMet8l0A8BM5QvLjhaaJasgsbMBdX4JjRu 

// Generate a new hash 
$new_password = Hash::make('password'); 

// $new_password == $2y$08$3KBlYKIMpIvk.TWwim9oPuwGA.Pzv1iF7BsDyYkz7kQlhkA/ueULe 

// Compare hashes the WRONG way 
$password === $new_password; // false 

// Compare hash the RIGHT way 
Hash::check('password', $password); // true 
Hash::check('password', $new_password); // true 

तो हैश श्रेणी के हैश :: मेक() विधि का उपयोग करें।

+0

धन्यवाद। लेकिन मुझे लार्वेल फॉर्म अनुरोध के माध्यम से सत्यापन करने की ज़रूरत है, इसे मैन्युअल रूप से नहीं कर रहा है। – Salar

3

मुझे यकीन नहीं है लेकिन मुझे लगता है कि लार्वेल में ऐसा करने का कोई मूल तरीका नहीं है।

class CustomValidator extends \Illuminate\Validation\Validator { 

    public function validateHash($attribute, $value, $parameters) 
    { 
     $expected = $parameters[0]; 

     return Hash::check($value, $expected); 
    } 
} 

एक प्रदाता में यह रजिस्टर:

class AppServiceProvider extends ServiceProvider { 

    /** 
    * Bootstrap any application services. 
    * 
    * @return void 
    */ 
    public function boot() 
    { 
     require_once __DIR__ . '/../Http/helpers.php'; 

     Validator::resolver(function($translator, $data, $rules, $messages) 
     { 
      return new CustomValidator($translator, $data, $rules, $messages); 
     }); 
    } 

    // ... 
} 

और एक फार्म के अनुरोध में इसका इस्तेमाल करते हैं:

class MyFormRequest extends FormRequest { 

    public function rules() 
    { 
     $password = Auth::user()->password; 

     return [ 
      'old_password' => "required|hash:" . $password 
     ] 
    } 

    // ... 

} 

लिंक करने के लिए यदि हां, तो आप एक कस्टम "हैश" सत्यापनकर्ता लागू कर सकते हैं प्रलेखन: http://laravel.com/docs/5.0/validation#custom-validation-rules

+1

यह मेरी मदद करता है। धन्यवाद! :) – rahmat

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