我有一个公共路线,任何用户都可以访问它。 (/timeline
)。
在这个动作中,如果用户被认证,我必须告诉他他是否喜欢这个帖子。
如果路由有auth:api
中间件,我可以使用$request->user()
获得通过身份验证的用户,但是如果我不使用auth:api
中间件,那么即使用户发送了正确的access_token,我也无法检查用户是否已通过身份验证。
如何在没有中间件的情况下检查access_token是否正确并在控制器中验证用户身份?如何在没有认证的情况下验证用户:laravel 5.3中的api中间件?
2
A
回答
7
您可以将警卫传递给您的方法,以检查用户是否使用特定警卫登录。
$request->user('api');
3
您使用的是auth:api
,所以我假定您正在讨论JSON请求。访问令牌通常坐在你的请求的头,所以你可以检查它像这样
public function timeline(Request $request) {
if ($request->has('access_token') || $request->header('access_token')) {
$user = Auth::guard('api')->user();
}
...
}
1
我没有在代码中挖的时候,但你可以看看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
验证。我的猜测是你会找到你的答案
+0
谢谢你Ilyas。我通过传球后与PeterPan的帮助合作。 –
相关问题
- 1. 我如何在没有Google Dll的情况下验证Gmail API
- 2. Laravel 5.3和使用api_token的API认证
- 3. Laravel的5.3认证不工作在我Laravel 5.3认证
- 4. 如何在laravel中验证登录5.3
- 5. 如何在没有客户端身份验证的情况下从服务器验证Firebase用户?
- 6. Laravel中间件API的验证
- 7. 如何在没有Cognito的情况下验证dynamoDB?
- 8. 如何在没有用户干预的情况下获取身份验证
- 9. Laravel 5.3 - 如何在没有CSRF的情况下将会话添加到`API`?
- 10. 在没有任何身份验证的情况下运行SSH
- 11. 如何在不验证电子邮件或电话的情况下确认Cognito用户池中的用户?
- 12. Laravel 5 - 如何在没有电子邮件确认的情况下进行身份验证?
- 13. 如何在没有身份验证的情况下连接到YouTube API?
- 14. laravel 5.3验证::用户()找不到
- 15. Laravel 5.3身份验证依赖用户
- 16. 如何在没有结帐的情况下验证svn中的软链接?
- 17. Laravel 5.3:如何在全球中间件中使用检查身份验证?
- 18. 如何用ajax Laravel进行验证5.3
- 19. Laravel 5.3中的多重身份验证
- 20. 在没有特定XSD的情况下验证XML
- 21. 是否可以在没有认证令牌的情况下使用AWS API
- 22. laravel中的API认证
- 23. Laravel中间件认证
- 24. 不能在没有身份验证的情况下创建桶
- 25. 在没有验证的情况下提交的表单
- 26. ASP.Net - 在没有Windows用户的情况下使用基本身份验证
- 27. 使用C#在没有浏览器验证的情况下访问Twitter API
- 28. 如何在这种情况下验证用户输入?
- 29. 如何在没有登录控制的情况下使用表单认证?
- 30. 在没有证书的情况下在mongodb replicaset中启用ssl
非常感谢Peter Pan。 –
我的荣幸。 ;) – PeterPan666
您也可以在没有请求对象的情况下使用** Auth :: guard('api') - > user()**。 – Gkiokan