首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel 8-无法从API路由获得身份验证来显示web路由(Auth Sanctum)

Laravel 8-无法从API路由获得身份验证来显示web路由(Auth Sanctum)
EN

Stack Overflow用户
提问于 2022-04-30 22:42:54
回答 1查看 478关注 0票数 0

我刚开始在拉拉维尔工作,遇到了桑克顿认证的问题。我有一个网站设置使用刀片,显示前端网站和表单。我使用web.php来路由前端页面和帐户部分的身份验证。我使用jQuery向API (api.php)发送请求以进行注册、登录和验证。API发送凭据,并创建一个Bearer令牌,我将其存储在本地存储中,以供以后的API请求使用。登录后,我将用户重定向到/account页面,该页面由auth保护。问题是web.php找不到从api设置的身份验证令牌,并将用户重定向回登录页面。这里有一些代码显示了站点是如何设置的,如果我在文件中遗漏了什么,请告诉我:

api.php --这是创建登录令牌的api路由。这是ajax请求中的。

代码语言:javascript
复制
Route::post('/login', [AuthController::class, 'login']);

web.php --这是需要安全的帐户视图,在显示(当前无法正确获取令牌)之前,需要获取api令牌。

代码语言:javascript
复制
Route::middleware('auth')->group(function(){
    Route::get('/account',[UserController::class, 'index']);
});

AuthController.php --这是创建令牌并通过api请求将其发送回来的逻辑。我将它存储在本地存储中,以便其他api调用

代码语言:javascript
复制
public function login(Request $request)
    {
        if (!Auth::attempt($request->only('email', 'password'))) {
            return response()->json([
                'message' => 'Invalid login details'
            ], 401);
        }

        $user = User::where('email', $request['email'])->firstOrFail();

        $user->tokens()->delete();

        $token = $user->createToken('token')->plainTextToken;

        return response()->json([
            'result' => 'success',
            'token' => $token,
            'token_type' => 'Bearer',
            ]);
    }

UserController.php --这是令牌经过身份验证之后返回的基本帐户视图。

代码语言:javascript
复制
public function index() {

        return view('account/dashboard', ['title' => 'Account Dashboard | Exclusive Member | Mint Auction']);

    }

auth.php -这显示了我的守卫是如何在Auth配置文件中设置的。

代码语言:javascript
复制
'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
        'api' => [
            'driver' => 'sanctum',
            'provider' => 'users',
            'hash' => false,
        ],
    ],
EN

回答 1

Stack Overflow用户

发布于 2022-05-01 01:48:54

弄明白了..。

我在ajax请求中发送了错误的CRSF令牌,因此它总是以不匹配的方式返回。

我还调整了以下代码:

web.php - web路由(制作自定义:web)

代码语言:javascript
复制
Route::middleware('auth:web')->group(function(){
    Route::get('/account',[UserController::class, 'index']);
});

Kernel.php -我为api middlewaregroup添加了中间件。

代码语言:javascript
复制
'api' => [
            \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Session\Middleware\StartSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
            'throttle:api',
        ],
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72072709

复制
相关文章

相似问题

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