我正在尝试设置一个Laravel后端,它使用Sanctum与React-Native前端应用程序交互。
我在routes/api.php
中设置了一个简单的测试路由,但是每当我向它发出请求时,我都会得到以下错误:
local.ERROR: Xdebug has detected a possible infinite loop, and aborted your script with a stack depth of '512' frames {"exception":"[object] (Error(code: 0): Xdebug has detected a possible infinite loop, and aborted your script with a stack depth of '512' frames at
C:\\Users\\George\\Projects\\gig-app\\backend\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Application.php:1339)
[stacktrace]
#0 C:\\Users\\George\\Projects\\gig-app\\backend\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Application.php(968): Illuminate\\Foundation\\Application->isDeferredService('config')
#1 C:\\Users\\George\\Projects\\gig-app\\backend\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Application.php(955): Illuminate\\Foundation\\Application->loadDeferredProviderIfNeeded('config')
#2 C:\\Users\\George\\Projects\\gig-app\\backend\\vendor\\laravel\\framework\\src\\Illuminate\\Container\\Container.php(731): Illuminate\\Foundation\\Application->resolve('config', Array)
#3 C:\\Users\\George\\Projects\\gig-app\\backend\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Application.php(942): Illuminate\\Container\\Container->make('config', Array)
#4 C:\\Users\\George\\Projects\\gig-app\\backend\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\helpers.php(120): Illuminate\\Foundation\\Application->make('config', Array)
#5 C:\\Users\\George\\Projects\\gig-app\\backend\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\helpers.php(274): app('config')
#6 C:\\Users\\George\\Projects\\gig-app\\backend\\vendor\\laravel\\sanctum\\src\\Guard.php(56): config('sanctum.guard', 'web')
#7 [internal function]: Laravel\\Sanctum\\Guard->__invoke(Object(Illuminate\\Http\\Request), Object(Illuminate\\Auth\\EloquentUserProvider))
#8 C:\\Users\\George\\Projects\\gig-app\\backend\\vendor\\laravel\\framework\\src\\Illuminate\\Auth\\RequestGuard.php(57): call_user_func(Object(Laravel\\Sanctum\\Guard), Object(Illuminate\\Http\\Request), Object(Illuminate\\Auth\\EloquentUserProvider))
#9 C:\\Users\\George\\Projects\\gig-app\\backend\\vendor\\laravel\\sanctum\\src\\Guard.php(57): Illuminate\\Auth\\RequestGuard->user()
#10 [internal function]: Laravel\\Sanctum\\Guard->__invoke(Object(Illuminate\\Http\\Request), Object(Illuminate\\Auth\\EloquentUserProvider))
#11 C:\\Users\\George\\Projects\\gig-app\\backend\\vendor\\laravel\\framework\\src\\Illuminate\\Auth\\RequestGuard.php(57): call_user_func(Object(Laravel\\Sanctum\\Guard), Object(Illuminate\\Http\\Request), Object(Illuminate\\Auth\\EloquentUserProvider))
字符串
路线是:
Route::middleware('auth:sanctum')->get('/test', function (Request $request) {
return response()->json(['message' => 'Welcome to Laravel'], 200);
});
型
请注意堆栈中的错误#6,我不确定这是从哪里来的,因为我已经将所有内容设置为api
#6 C:\\Users\\George\\Projects\\gig-app\\backend\\vendor\\laravel\\sanctum\\src\\Guard.php(56): config('sanctum. Guard', 'web')
型
即使我从路由中删除中间件,我仍然会得到同样的错误。
我在config/auth.php
中安装并配置了Sanctum,如下所示:
return [
'defaults' => [
'guard' => 'api',
'passwords' => 'users',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'sanctum',
'provider' => 'users',
]
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Models\User::class,
],
// 'users' => [
// 'driver' => 'database',
// 'table' => 'users',
// ],
],
'passwords' => [
'users' => [
'provider' => 'users',
'table' => 'password_reset_tokens',
'expire' => 60,
'throttle' => 60,
],
],
'password_timeout' => 10800,
];
型
在Kernel.php
中,我取消了对EnsureFrontendRequestsAreStateful
的注解:
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
\Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
\Illuminate\Routing\Middleware\ThrottleRequests::class.':api',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
];
型
这是React-Native应用程序中的App.js
:
import React, { useEffect, useState } from "react";
import { StatusBar } from "expo-status-bar";
import { StyleSheet, Text, View } from "react-native";
export default function App() {
const [message, setMessage] = useState("");
useEffect(() => {
fetch("https://ngrok-free.app/api/test", {
headers: {
"Content-Type": "application/json",
Accept: "application/json",
},
})
.then((response) => response.json())
.then((data) => setMessage(data.message))
.catch((error) => console. Error(error));
}, []);
return (
<View style={styles.container}>
<Text>The message from the server is:</Text>
<Text>{message}</Text>
<StatusBar style="auto" />
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: "#fff",
alignItems: "center",
justifyContent: "center",
},
});
型
1条答案
按热度按时间hc8w905p1#
这些是我将采取的一些步骤来调试问题:
1-您正在将请求发送到https://ngrok-free.app/api/test域,因此您的路由:
字符串
应该 Package (如果还没有完成,这里没有显示)在一个路由::域如下:
型
2-首先,我将测试没有认证中间件的端点,它应该已经工作在这一点上
3-如果测试一个auth端点,你首先应该登录,然后发送你从laravel收到的auth token,并在头中包含任何请求,比如Authentication:'Bearer your-token'
4-我建议你从fetch转移到axios(使用fetch await而不是then/catch),因为它在某些情况下是有用的/必要的。
另外,您显示的错误#6来自config.sanctum.guard,我建议您将其保留为空(空数组)