Php 在Laravel中自定义身份验证
我使用的是Laravel5.1,我需要使用现有的用户表,它有自己的密码算法。 经过数小时的研究,我找到了解决方案,以下是步骤。 希望这对Laravelers有所帮助。在config/auth.php文件中, 将驱动程序值设置为自定义。像这样Php 在Laravel中自定义身份验证,php,customization,laravel-5.1,Php,Customization,Laravel 5.1,我使用的是Laravel5.1,我需要使用现有的用户表,它有自己的密码算法。 经过数小时的研究,我找到了解决方案,以下是步骤。 希望这对Laravelers有所帮助。在config/auth.php文件中, 将驱动程序值设置为自定义。像这样 ... 'driver' => 'custom', ... 在app/Auth目录中创建文件“CustomUserProvider.php” <?php namespace App\Auth; use App\Model\User; use
...
'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;
}
}
?>
<?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(){
//
}
}
?>
接下来,在app/Providers目录中创建一个文件“CustomAuthProvider.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;
}
}
?>
<?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(){
//
}
}
?>
就这样。可以回答您自己的问题,但请保留问答格式。一个问题需要是一个问题,而不是对下面答案的引用