如何解决Laravel 5.8-如何使用可选的auth处理API路由?
有人可以通过可选的 Auth 检查来帮助我处理API路由吗?我有一个 API ROUTE “ apply-coupon”,“来宾”和“已登录”用户都可以使用。如果用户已登录,我需要在控制器中获取用户ID。
前端-使用React JS开发,单击“ Apply Coupon”按钮后,API调用为-
API end point - https://example.com/api/apply-coupon
Request payload - {coupon : 'my-coupon-code',shop_id : '1',subtotal : '150'}
注意:,因为访客用户也可以使用“应用优惠券”功能,因此标头中不会传递令牌。
预期输出:-用户单击“应用优惠券”时,如果已登录用户ID,则应返回用户ID。
Route::post('/apply-coupon',[
'uses' => 'CouponController@applyCoupon',]);
更新:-,默认防护为-
'defaults' => [
'guard' => 'web','passwords' => 'users',],
我尝试过
if(Auth::user()) {
dd(Auth::user());
}
和
auth()->guard('api')->user()
但是没有任何效果。谢谢!
解决方法
添加一个中间件ValidateUser.php
namespace App\Http\Middleware;
use Closure;
use Tymon\JWTAuth\Exceptions\JWTException;
use Tymon\JWTAuth\Exceptions\TokenExpiredException;
use Tymon\JWTAuth\Exceptions\TokenInvalidException;
use Tymon\JWTAuth\Facades\JWTAuth;
class ValidateUser
{
public function handle($request,Closure $next)
{
if (! $request->bearerToken()) {
return $next($request);
}
return $this->validateToken($request,$next);
}
private function validateToken($request,Closure $next)
{
try {
if (! JWTAuth::parseToken()->authenticate()) {
throw new \Exception('Unable to find the account');
}
} catch (TokenExpiredException $e) {
throw new \Exception('Token has been expired');
} catch (TokenInvalidException $e) {
throw new \Exception('Token is not valid');
} catch (JWTException $e) {
throw new \Exception('Unable to parse the token');
}
return $next($request);
}
}
在您的http / kernel.php中
$ routeMiddleware
添加
'api.auth.validate' => \App\Http\Middleware\ValidateUser::class
现在在您的api.php中,您可以使用中间件来检查它,例如:
middleware(['api.auth.validate'])
,
我认为您不能“任意”保护路线。我认为您可以做的是在控制器中签入用户是否通过身份验证,如果通过身份验证,则获取其ID。当然,该路线应该不受保护
use Illuminate\Support\Facades\Auth;
...
function applyCoupon() {
if (Auth::check()) {
// The user is logged in...
// return Cupon + Auth::id()
} else {
// Not logged in code
// return Cupon
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。