我想把預設的bcrypt(password)替換成md5(password+salt),在不更改vendor檔案的情況下,只能自己添加一個ServiceProvider替換原來的。於是我自己寫了一個AddSaltHasher,但是卻發現在make方法中無法擷取$salt,有什麼辦法可以擷取這個值嗎?
namespace App\Services;use RuntimeException;use Illuminate\Contracts\Hashing\Hasher as HasherContract;class AddSaltHasher implements HasherContract{public function make($value, array $options = []){ $hash = md5($value.$salt);//<-無法擷取資料庫中存放的salt if ($hash === false) { throw new RuntimeException('addsalt hashing not supported.'); } return $hash;}public function check($value, $hashedValue, array $options = []){ if (strlen($hashedValue) === 0) { return false; } $value = self::make($value); if($value!=$hashedValue){ return false; } return true;}public function needsRehash($hashedValue, array $options = []){ return false;}}
回複內容:
我想把預設的bcrypt(password)替換成md5(password+salt),在不更改vendor檔案的情況下,只能自己添加一個ServiceProvider替換原來的。於是我自己寫了一個AddSaltHasher,但是卻發現在make方法中無法擷取$salt,有什麼辦法可以擷取這個值嗎?
namespace App\Services;use RuntimeException;use Illuminate\Contracts\Hashing\Hasher as HasherContract;class AddSaltHasher implements HasherContract{public function make($value, array $options = []){ $hash = md5($value.$salt);//<-無法擷取資料庫中存放的salt if ($hash === false) { throw new RuntimeException('addsalt hashing not supported.'); } return $hash;}public function check($value, $hashedValue, array $options = []){ if (strlen($hashedValue) === 0) { return false; } $value = self::make($value); if($value!=$hashedValue){ return false; } return true;}public function needsRehash($hashedValue, array $options = []){ return false;}}
你自己定義一個類然後設定一個靜態方法來做這件事情會更靈活,你說呢。如果要確保安全性更高,建議不要用MD5,而是用SHA-2版本。PHP的Hash擴充提供的方法(http://php.net/manual/zh/function.hash.php)可以使用SHA-2