我刚开始在拉拉维尔工作,遇到了桑克顿认证的问题。我有一个网站设置使用刀片,显示前端网站和表单。我使用web.php来路由前端页面和帐户部分的身份验证。我使用jQuery向API (api.php)发送请求以进行注册、登录和验证。API发送凭据,并创建一个Bearer令牌,我将其存储在本地存储中,以供以后的API请求使用。登录后,我将用户重定向到/account页面,该页面由auth保护。问题是web.php找不到从api设置的身份验证令牌,并将用户重定向回登录页面。这里有一些代码显示了站点是如何设置的,如果我在文件中遗漏了什么,请告诉我:
api.php --这是创建登录令牌的api路由。这是ajax请求中的。。
Route::post('/login', [AuthController::class, 'login']);web.php --这是需要安全的帐户视图,在显示(当前无法正确获取令牌)之前,需要获取api令牌。
Route::middleware('auth')->group(function(){
Route::get('/account',[UserController::class, 'index']);
});AuthController.php --这是创建令牌并通过api请求将其发送回来的逻辑。我将它存储在本地存储中,以便其他api调用
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 --这是令牌经过身份验证之后返回的基本帐户视图。
public function index() {
return view('account/dashboard', ['title' => 'Account Dashboard | Exclusive Member | Mint Auction']);
}auth.php -这显示了我的守卫是如何在Auth配置文件中设置的。
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'sanctum',
'provider' => 'users',
'hash' => false,
],
],发布于 2022-05-01 01:48:54
弄明白了..。
我在ajax请求中发送了错误的CRSF令牌,因此它总是以不匹配的方式返回。
我还调整了以下代码:
web.php - web路由(制作自定义:web)
Route::middleware('auth:web')->group(function(){
Route::get('/account',[UserController::class, 'index']);
});Kernel.php -我为api middlewaregroup添加了中间件。
'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',
],https://stackoverflow.com/questions/72072709
复制相似问题