有人能帮助我使用可选的Auth检查来处理API路由吗?我有一个API路由‘应用-优惠券’,可以使用‘客人’和‘登录’用户。如果用户登录,我需要在控制器中获取用户ID。
前端-是使用React开发的,在“应用优惠券”按钮上单击,API调用为-
API end point - https://example.com/api/apply-coupon
Request payload - {coupon : 'my-coupon-code', shop_id : '1', subtotal : '150'}注意:在标题中没有传递令牌,因为“应用优惠券”功能也适用于来宾用户。
预期输出:-当用户单击“应用优惠券”时,如果用户ID登录,它应该返回用户id。
以下是我在api.php文件中的路线-
Route::post('/apply-coupon', [
'uses' => 'CouponController@applyCoupon',
]);更新:-,默认保护为-
'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],我试过了
if(Auth::user()) {
dd(Auth::user());
}和
auth()->guard('api')->user()但什么都没起作用。谢谢!!
发布于 2020-08-28 12:32:25
添加一个中间件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'])发布于 2020-08-28 15:44:09
我不认为你能“选择”保护路线。我认为您可以做的是在您的控制器中签入该用户是否经过身份验证,如果是的话,则获取它的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
}
}https://stackoverflow.com/questions/63633758
复制相似问题