2017-06-15 34 views
0

隨着Laravel 5.4,我有用戶表Laravel如何插入隨機密碼自動

Users table: 
- id 
- email 
- password 
- created_at 
- updated_at 

然後當我插入新的用戶數據,我想自動生成隨機密碼(如9c41Mr2)。

例如,一旦我插入一個數據:

$data = [ 
    'email' => '[email protected]', 
]; 

DB::table('users')->insert($data); 

我想這樣在MySQL中新行:

id: 1 (generated by autoincrement) 
email: [email protected] 
password: 9c41Mr2 (wow! automatic!) 
created_at: 2017-06-14 01:00:00 
updated_at: 2017-06-14 01:00:00 

所以,任何人都可以告訴我在Laravel的最佳方式?謝謝。 PS:不用擔心密碼散列問題,我簡化了我的問題。

回答

1

使用mutator方法來設置密碼。通過增加覆蓋的方法:

public function setPasswordAttribute($value) 
{ 
    $this->attributes['password'] = 'some random password generator'; 
} 

看到這裏的文檔:

https://laravel.com/docs/5.4/eloquent-mutators#defining-a-mutator

設置屬性時,您並不需要在所有使用$ value參數。

+0

是否有可能發生變異密碼屬性無需編寫代碼'$ user-> password ='something';'? Mutator是否適合我的情況? –

+0

是的,正如@Mathieu在下面發佈的,您可以在用戶模型第一次保存時使用bcrypt幫助程序生成隨機密碼。稍後,您可以根據需要更新/更改密碼。 – btl

+0

OH太棒了!很簡單。謝謝兩位。我會嘗試mutator。謝謝。 –

2

在用戶模式:

public function setpasswordAttribute($value) 
{ 
    $this->attributes['password'] = bcrypt($value ?: str_random(10)); 
} 
0

在簡單的情況下,只需使用一個Mutator您的密碼,但是,如果你的應用長大,它被認爲是使用Observers