我有一个使用 Auth 运行的 PHP laravel 后端。如何从 flutter 登录?
我测试了它的注册和登录,使用 Laravel Blade 视图,然后使用一个简单的 HTML 表单,它起作用了。我现在尝试从我的 flutter 应用程序登录,但总是遇到相同的异常:
“SocketException:操作系统错误:连接被拒绝,errno = 111,地址 = 127.0.0.1,端口 = 41978”
除了每次尝试时端口都会增加。
我首先从桌面上的文件进行了这个简单的调用并成功登录:
<form method="POST" action="http://127.0.0.1:8000/login">
<input id="email" name="email" type="email" />
<input id="password" name="password" type="password" />
<button type="submit">login</button>
</form>
这是我的flutter HTTP请求代码:
http.Response webMessage;
webMessage = await http.post('http://127.0.0.1:8000/login',
body: {
'email': myUser,
'password': myPass,
},
headers: {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Content-Type': 'application/x-www-form-urlencoded'
},
encoding: Encoding.getByName('utf-8'),
).timeout(_timeout);
我还尝试了 Accept 和 Content-Type: 'application/json'。发送一个字符串,一个地图。
我也在VerifyCsrfToken中间件中设置了这个:
protected $except = [
'login',
];
我希望该请求能够成功登录用户,并使用会话和令牌 cookie 进行响应,以便在将来的请求中使用。
谢谢!
如果您使用 Android 模拟器并尝试访问计算机中的本地服务器,则 IP 不应该是 127.0.0.1 也不应该是 localhost,因为服务器不在手机中。尝试使用 10.0.2.2,如此处所述。
另一种方法可能是使用您的 Android 调试桥 (ADB)。
在任务管理器中找到您使用的 adb 的路径。打开控制台并导航到该文件夹。您可以在其中执行以下命令,将虚拟设备端口映射到计算机端口:
adb reverse tcp:3001 tcp:8000
adb reverse tcp:(phones port) tcp:8000(computers port)
那么你应该可以使用
127.0.0.1
或 localhost
我遇到了同样的问题,.Net Core Web Api 项目作为 VS19 中的后端服务在调试模式下运行,在 IIS Express 上执行,同时从 android 模拟器发送 Flutter 项目的 http 请求。
要解决此问题,请转到您的 Web.Api 项目属性,然后转到“调试”选项卡,然后修改 AppUrl 的端口:http://localhost:[您的端口],然后将您的 android baseUrl 设置为 http://10.0.2.2: http 请求的 [your 端口]。它对我有用,希望对其他人也有帮助。
要确保您的 Laravel 服务器正在运行并且可以从模拟器访问,请按照以下步骤操作:
启动 Laravel 服务器:
php artisan serve --host=0.0.0.0 --port=8000
使用
--host=0.0.0.0
可以在本地网络上访问服务器,这是从模拟器连接所必需的。
将 127.0.0.1 替换为 10.0.2.2:
在您的 Flutter 项目中,请确保使用
10.0.2.2
而不是 127.0.0.1
从模拟器访问 Laravel 服务器。
此设置允许您的模拟器与 Laravel 后端服务器进行通信。