-1
我正在使用Laravel 5.1,并且需要使用具有自己的密码算法的现有用户表。 经过数小时和数小时的研究,我找到了解决方案,下面是步骤。 希望这可以帮助Laravelers。在Laravel中自定义身份验证
我正在使用Laravel 5.1,并且需要使用具有自己的密码算法的现有用户表。 经过数小时和数小时的研究,我找到了解决方案,下面是步骤。 希望这可以帮助Laravelers。在Laravel中自定义身份验证
在config/auth.php文件中, 将驱动程序值设置为自定义。喜欢这个。
...
'driver' => 'custom',
...
在app/Auth目录下创建一个文件CustomUserProvider.php。
<?php
namespace App\Auth;
use App\Model\User;
use Carbon\Carbon;
use Illuminate\Auth\GenericUser;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Contracts\Auth\UserProvider;
class CustomUserProvider implements UserProvider{
/**
* Retrieve a user by their unique identifier.
*
* @param mixed $identifier
* @return \Illuminate\Contracts\Auth\Authenticatable|null
*/
public function retrieveById($identifier){
$qry = User::where('id', '=', $identifier);
if ($qry->count() > 0){
$user = $qry->select('id', 'firstName', 'lastName', 'city', 'state', 'zipcode', 'email', 'dob'
, 'mobilePhone', 'password', 'question', 'answer', 'passwordSalt', 'promoCode', 'createdDate', 'isActivated', 'activationDate'
, 'isDeleted', 'firstTimeLogin', 'role', 'remember_token')->first();
return $user;
}
return NULL;
}
/**
* Retrieve a user by by their unique identifier and "remember me" token.
*
* @param mixed $identifier
* @param string $token
* @return \Illuminate\Contracts\Auth\Authenticatable|null
*/
public function retrieveByToken($identifier, $token){
$qry = User::where('id', '=', $identifier)
->where('remember_token', '=', $token);
if ($qry->count() > 0){
$user = $qry->select('id', 'firstName', 'lastName', 'city', 'state', 'zipcode', 'email', 'dob'
, 'mobilePhone', 'password', 'question', 'answer', 'passwordSalt', 'promoCode', 'createdDate', 'isActivated', 'activationDate'
, 'isDeleted', 'firstTimeLogin', 'role', 'remember_token')->first();
return $user;
}
return NULL;
}
/**
* Update the "remember me" token for the given user in storage.
*
* @param \Illuminate\Contracts\Auth\Authenticatable $user
* @param string $token
* @return void
*/
public function updateRememberToken(Authenticatable $user, $token){
$user->setRememberToken($token);
$user->save();
}
/**
* Retrieve a user by the given credentials.
*
* @param array $credentials
* @return \Illuminate\Contracts\Auth\Authenticatable|null
*/
public function retrieveByCredentials(array $credentials){
$qry = User::where('email', 'like', $credentials['email']);
if ($qry->count() > 0){
$user = $qry->select('id', 'firstName', 'lastName', 'city', 'state', 'zipcode', 'email', 'dob'
, 'mobilePhone', 'password', 'question', 'answer', 'passwordSalt', 'promoCode', 'createdDate', 'isActivated', 'activationDate'
, 'isDeleted', 'firstTimeLogin', 'role', 'remember_token')->first();
return $user;
}
return NULL;
}
/**
* Validate a user against the given credentials.
*
* @param \Illuminate\Contracts\Auth\Authenticatable $user
* @param array $credentials
* @return bool
*/
public function validateCredentials(Authenticatable $user, array $credentials){
$salt = base64_decode($user->passwordSalt);
$password = $credentials['password'];
$utf16Password = mb_convert_encoding($password, 'UTF-16LE', 'UTF-8');
$calculatedPassword = base64_encode(sha1($salt . $utf16Password, true));
if ($user->email == $credentials['email'] && $user->getAuthPassword() == $calculatedPassword){
return true;
}
return false;
}
}
?>
接下来,在app/Providers目录下创建一个文件'CustomAuthProvider.php'。
<?php
namespace App\Providers;
use App\Auth\CustomUserProvider;
use Illuminate\Support\ServiceProvider;
class CustomAuthProvider extends ServiceProvider{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot(){
$this->app['auth']->extend('custom', function(){
return new CustomUserProvider();
});
}
/**
* Register the application services.
*
* @return void
*/
public function register(){
//
}
}
?>
就是这样。
回答你自己的问题很好,但请保持问答格式。一个问题需要成为一个问题,而不是参考下面的答案 –