2014-03-13 33 views
0

我有一個帶有密碼屬性的用戶模型。Eloquent用戶模型密碼屬性更新上的火事件

如果我使用從數據庫檢索:

$user = User::find(3); 

並改變(在控制器)的密碼值:

$user->password = Input::get('passwordValue') 

我想要觸發雄辯更新事件將首先創建一個salt並將$ salt與$ passwordValue連接,然後將該值分配給$ user-> password,如下所示:

$user->password = md5($salt . $passwordValue) 

在此之後,我可以節省$用戶:

$user->save(); 

我想這個事件,火災每個用戶在自己的個人資料頁改變他的密碼的時間。

回答

0

您可以在模型中定義一個二傳手的密碼字段:

public function setPasswordAttribute($value) 
{ 
    $salt = 'whatever'; 
    $this->attributes['password'] = md5($salt.$value); 
} 

然後,在你的控制器(或其他)的代碼,只需設置使用明文版本密碼:

$user->password = Input::get('new_password'); 

但是,應該注意的是,在Laravel中,你真的不應該通過使用帶有salt的md5來設置密碼,而是使用Laravel提供的散列函數:

$this->attributes['password'] = Hash::make($value); 

這將創建一個更強大的bcrypt生成的密碼。你這樣做,不過,必須改變你檢查密碼的方式,雖然這是很簡單的:

if (Hash::check($plaintext_password, $user->password)) { 
    // password is correct 
} 

然而,進一步的這個,你應該使用驗證函數來處理登錄,所以你甚至都不需要直接使用Hash::check()

if (Auth::attempt(array('username' => Input::get('username'), 'password' => Input::get('password'))) { 
    // logged in, redirect 
} else { 
    // attempt failed, set message and redirect 
} 
+0

簡單而正是我所需要的。 Tnx :) – vlatkorun