私はLaravelにレガシーアプリを移植しています。古いアプリはMD5を使ってパスワードなしでパスワードをハッシュするので、Laravel内でそれを複製する必要があります。記録のために、私たちはパスワードをsaltでbcryptに変更していますが、単純なプロセスではなく、ユーザーログインが必要です。その間、従来のハッシュでログインする必要があります。LaravelでパスワードにMD5ハッシングを使用するにはどうすればよいですか?
私はMD5にAuth::hash
を変換するには、このガイドに従っている:How to use SHA1 encryption instead of BCrypt in Laravel 4?アカウント登録時に、私は私のmake
方法にプレーンテキストでパスワードおよび生成されたハッシュをプリントアウト
:
public function make($value, array $options = array()) {
echo $value.'<br>'.hash('md5', $value);
exit;
return hash('md5', $value);
}
Iを次のようにしてください:
123456
e10adc3949ba59abbe56e057f20f883e
偉大な、それは私が必要です。しかし、それがデータベースに保存されると、私は完全に別のハッシュを取得します。私の推測では、Laravelはパスワードをどこか別の場所に保存していますが、どこでどのようにこれを上書きするのかわかりません。
app/libraries
内部マイMD5Hasher.php
ファイル:
<?php
class MD5Hasher implements Illuminate\Contracts\Hashing\Hasher {
/**
* Hash the given value.
*
* @param string $value
* @return array $options
* @return string
*/
public function make($value, array $options = array()) {
return hash('md5', $value);
}
/**
* Check the given plain value against a hash.
*
* @param string $value
* @param string $hashedValue
* @param array $options
* @return bool
*/
public function check($value, $hashedValue, array $options = array()) {
return $this->make($value) === $hashedValue;
}
/**
* Check if the given hash has been hashed using the given options.
*
* @param string $hashedValue
* @param array $options
* @return bool
*/
public function needsRehash($hashedValue, array $options = array()) {
return false;
}
}
マイMD5HashServiceProvider.php
:
<?php
class MD5HashServiceProvider extends Illuminate\Support\ServiceProvider {
/**
* Register the service provider.
*
* @return void
*/
public function register() {
$this->app['hash'] = $this->app->share(function() {
return new MD5Hasher();
});
}
/**
* Get the services provided by the provider.
*
* @return array
*/
public function provides() {
return array('hash');
}
}
私AuthController.php
は、次のようになります。
<?php
namespace App\Http\Controllers\Auth;
use Hash;
use App\User;
use Validator;
use Mail;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ThrottlesLogins;
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;
class AuthController extends Controller
{
/*
|--------------------------------------------------------------------------
| Registration & Login Controller
|--------------------------------------------------------------------------
|
| This controller handles the registration of new users, as well as the
| authentication of existing users. By default, this controller uses
| a simple trait to add these behaviors. Why don't you explore it?
|
*/
use AuthenticatesAndRegistersUsers, ThrottlesLogins;
//protected $redirectTo = '/account';
/**
* Create a new authentication controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest', ['except' => 'getLogout']);
}
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
protected function validator(array $data)
{
return Validator::make($data, [
'name' => 'required|max:255',
'email' => 'required|email|max:255|unique:users',
'password' => 'required|confirmed|min:6',
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return User
*/
protected function create(array $data)
{
$this->redirectTo = '/register/step-1';
$user = User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
// email the user
Mail::send('emails.register', ['user' => $user], function($message) use ($user)
{
$message->to($user->email, $user->name)->subject('Edexus - Welcome');
});
// email the admin
Mail::send('emails.register-admin', ['user' => $user], function($message) use ($user)
{
$message->to('[email protected]***.com', 'Edexus')->subject('Edexus - New user sign up');
});
return $user;
}
}
SHA1が廃止されましたを追加します。 – aldrin27
@ aldrin27 - 洞察力のあるコメントをいただきありがとうございます。私はSHA1を使用していません。私はプレーンなMD5を使用していますが(それはさらに悪いですが)、bcryptを移植するための移行プロセスの一部です。 – Mike
パスワードは、ユーザーモデル、AuthController、および関連する特性のいずれかでハッシュすることができます。余分なハッシングがあるかどうかを確認したり、ファイルを提供して助けてください。 –