首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel5.8-如何使用可选的auth处理API路由?

Laravel5.8-如何使用可选的auth处理API路由?
EN

Stack Overflow用户
提问于 2020-08-28 12:25:14
回答 2查看 1.2K关注 0票数 0

有人能帮助我使用可选的Auth检查来处理API路由吗?我有一个API路由‘应用-优惠券’,可以使用‘客人’和‘登录’用户。如果用户登录,我需要在控制器中获取用户ID。

前端-是使用React开发的,在“应用优惠券”按钮上单击,API调用为-

代码语言:javascript
复制
API end point - https://example.com/api/apply-coupon
Request payload - {coupon : 'my-coupon-code', shop_id : '1', subtotal : '150'}

注意:在标题中没有传递令牌,因为“应用优惠券”功能也适用于来宾用户。

预期输出:-当用户单击“应用优惠券”时,如果用户ID登录,它应该返回用户id。

以下是我在api.php文件中的路线-

代码语言:javascript
复制
Route::post('/apply-coupon', [
    'uses' => 'CouponController@applyCoupon',
]);

更新:-,默认保护为-

代码语言:javascript
复制
'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],

我试过了

代码语言:javascript
复制
if(Auth::user()) {
     dd(Auth::user());
}

代码语言:javascript
复制
auth()->guard('api')->user()

但什么都没起作用。谢谢!!

EN

回答 2

Stack Overflow用户

发布于 2020-08-28 12:32:25

添加一个中间件ValidateUser.php

代码语言:javascript
复制
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

添加

代码语言:javascript
复制
'api.auth.validate' => \App\Http\Middleware\ValidateUser::class

现在在您的api.php中,您可以使用中间件来检查它,如下所示:

代码语言:javascript
复制
middleware(['api.auth.validate'])
票数 0
EN

Stack Overflow用户

发布于 2020-08-28 15:44:09

我不认为你能“选择”保护路线。我认为您可以做的是在您的控制器中签入该用户是否经过身份验证,如果是的话,则获取它的ID。

代码语言:javascript
复制
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
    }
}

文档

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63633758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档