如何在没有认证的情况下验证用户:laravel 5.3中的api中间件?
我有一个公共路线,任何用户都可以访问它。 (/timeline
)。
在这个动作中,如果用户被认证,我必须告诉他他是否喜欢这个帖子。
如果路由有auth:api
中间件,我可以使用$request->user()
获得通过身份验证的用户,但是如果我不使用auth:api
中间件,那么即使用户发送了正确的access_token,我也无法检查用户是否已通过身份验证。
如何在没有中间件的情况下检查access_token是否正确并在控制器中验证用户身份?如何在没有认证的情况下验证用户:laravel 5.3中的api中间件?
您可以将警卫传递给您的方法,以检查用户是否使用特定警卫登录。
$request->user('api');
您使用的是auth:api
,所以我假定您正在讨论JSON请求。访问令牌通常坐在你的请求的头,所以你可以检查它像这样
public function timeline(Request $request) {
if ($request->has('access_token') || $request->header('access_token')) {
$user = Auth::guard('api')->user();
}
...
}
我没有在代码中挖的时候,但你可以看看AUTH:API中间件。你会发现身份验证过程如何工作。如果你还没有找到一件事让我知道,我会在今晚看看它,并改善我的答案。
在文件Laravel\Passport\Http\Middleware\CheckClientCredentials
,你会发现这一点:
<?php
namespace Laravel\Passport\Http\Middleware;
use Closure;
use League\OAuth2\Server\ResourceServer;
use Illuminate\Auth\AuthenticationException;
use League\OAuth2\Server\Exception\OAuthServerException;
use Symfony\Bridge\PsrHttpMessage\Factory\DiactorosFactory;
class CheckClientCredentials
{
/**
* The Resource Server instance.
*
* @var ResourceServer
*/
private $server;
/**
* Create a new middleware instance.
*
* @param ResourceServer $server
* @return void
*/
public function __construct(ResourceServer $server)
{
$this->server = $server;
}
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*
* @throws \Illuminate\Auth\AuthenticationException
*/
public function handle($request, Closure $next, ...$scopes)
{
$psr = (new DiactorosFactory)->createRequest($request);
try{
$psr = $this->server->validateAuthenticatedRequest($psr);
} catch (OAuthServerException $e) {
throw new AuthenticationException;
}
foreach ($scopes as $scope) {
if (!in_array($scope,$psr->getAttribute('oauth_scopes'))) {
throw new AuthenticationException;
}
}
return $next($request);
}
}
当你越挖越深,你会看到,请求被这里League\OAuth2\Server\RecourceServer.php
验证。我的猜测是你会找到你的答案
谢谢你Ilyas。我通过传球后与PeterPan的帮助合作。 –
非常感谢Peter Pan。 –
我的荣幸。 ;) – PeterPan666
您也可以在没有请求对象的情况下使用** Auth :: guard('api') - > user()**。 – Gkiokan