我目前正在使用Laravel 5 Authentification,但我已编辑它以允许我连接到API服务器而不是Eloquent模型。
以下是我的自定义UserProvider的代码:
<?php namespace App\Auth;
use Illuminate\Contracts\Auth\UserProvider as UserProviderInterface;
use WDAL;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Auth\GenericUser;
use Session;
class WolfUserProvider implements UserProviderInterface {
private $_loggedUser;
public function __construct()
{
$this->_loggedUser = null;
$user = Session::get('user');
if (!empty($user)) {
$this->_loggedUser = unserialize($user);
}
}
public function retrieveById($id)
{
return $this->_loggedUser;
}
public function retrieveByToken($identifier, $token)
{
return null;
}
public function updateRememberToken(Authenticatable $user, $token)
{
//dd('updateRememberToken');
}
public function retrieveByCredentials(array $credentials)
{
$user = WDAL::getContactCredentials($credentials['login']);
return $user;
}
public function validateCredentials(Authenticatable $user, array $credentials)
{
if($user->username == $credentials['login'] && $user->password == $credentials['password']){
$this->_loggedUser = $user;
Session::set('user', serialize($user));
return true;
}
else{
return false;
}
}
}
?>
此代码可能不完美,因为它仍处于早期开发阶段;-)(如果您愿意,可以随意向我提出一些改进建议)
因此,当用户被登录时,它可以访问整个平台和多个视图,并可以与API服务器通信以显示和编辑数据。
有时,API服务器可以返回&#34;无效的会话ID&#34;当我的模型收到此消息时,应将用户重定向到登录页面。
从控制器中我很容易处理我可以使用此代码(注销链接):
public function getLogout()
{
$this->auth->logout();
Session::flush();
return redirect('/');
}
但是你知道我应该如何从模特出发吗?我当然可以编辑我的所有控制器来检查模型返回的值,但是由于中间件,它不能完成吗? 编辑所有控制器似乎真的很长,这意味着会有很多重复的代码。
答案 0 :(得分:0)
我的一个尝试是从Controller中抛出异常,并从auth中间件中获取。
它没有用,因为我没有写use Exception;
我现在正在捕获异常,现在可以将用户从中间件重定向。
无论如何,谢谢!