Laravel v8.15.0 (PHP v7.3.23) 共享服务器上的移动应用程序 API POST 路由不起作用
Posted
技术标签:
【中文标题】Laravel v8.15.0 (PHP v7.3.23) 共享服务器上的移动应用程序 API POST 路由不起作用【英文标题】:Laravel v8.15.0 (PHP v7.3.23) An API for Mobile Application on a Shared Server POST Routes not working 【发布时间】:2021-03-11 02:11:09 【问题描述】:我在共享服务器上。
Laravel v8.15.0 (php v7.3.23)
无法正确设置。
Sanctum 和 Passport 都尝试过,但由于 500 内部服务器错误而崩溃。所以删除了它们。
https://townies.pk/api/v1/getCart 正在工作。 另一个获取图片的 GET 路径也在工作。
但是https://townies.pk/api/register POST 或https://townies.pk/api/v1/register POST 不起作用。 500 内部服务器错误。
而https://townies.pk/api/login POST 或https://townies.pk/api/v1/login POST 不起作用。 500 内部服务器错误。
api.php
<?php
use App\Models\User;
use App\Http\Controllers\AuthController;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Hash;
use Illuminate\Validation\ValidationException;
use Illuminate\Support\Facades\DB;
/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/
/*Route::middleware('auth:api')->get('/user', function (Request $request)
return $request->user();
);*/
Route::get('/v1/getCart', function(Request $request)
return response()->json([
'success'=> true,
'msg'=> "yes",
'cartItems' => ['Beef Salaami Large: Rs. 780/-', 'Chicken Supreme Small: Rs. 290/-', 'Super Supreme Medium: Rs. 530/-' ]
])
->header('Content-Type', 'application/json');
);
Route::post('/v1/register', [AuthController::class, 'register'])->name('register');
Route::post('/v1/login', [AuthController::class, 'login'])->name('login');
AuthController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class AuthController extends Controller
public function register(Request $request)
$validator = Validator::make($request->all(), [
'name' => 'required',
'email' => 'required|email',
'password' => 'required'
]);
if($validator->fails())
Log::error('Something is really going wrong.');
return response()->json(['status_code' => 400, 'message' => 'Bad Request']);
$user = new User();
$user->name = $request->name;
$user->email = $request->email;
$user->password = algo($request->password);
$user->save();
return response()->json([
'status_code' => 201,
'message' => 'User Registration Successful.'
]);
public function login(Request $request)
$validator = Validator::make($request->all(), [
'email' => 'required|email',
'password' => 'required'
]);
if($validator->fails())
return response()->json(['status_code' => 400, 'message' => 'Bad Request']);
$credentials = request(['email', 'password']);
if(!Auth::attempt($credentials))
return response()->json([
'status_code' => 401,
'message' => 'Unauthorised'
]);
$user = User::where('email', $request->email)->first();
$tokenResult = $user->createToken('authToken')->plaitTextToken;
return response()->json([
'status_code' => 200,
'token' => $tokenResult
]);
public function logout(Request $request)
$request->user()->currentAccessToken()->delete();
return response()->json([
'status_code' => 200,
'message' => 'LogOut Successful'
]);
我的数据库架构
【问题讨论】:
您需要 500 的内容来进一步调试它。另外,我的直觉说这不是 Laravel 中的错误,因为您还在那里发布了跟踪器,而是您的配置错误。 是的,我知道这是我的错误配置。但现在无法弄清楚2天。我只能做 GET 请求。但没有 POST 请求。 【参考方案1】:下次,请分享您日志中的异常消息。当我们对错误消息本身有清晰的了解时,调试错误会更容易和更快。
我尝试使用 Laravel Sanctum 和 /register
在将缺少的导入添加到 AuthController
和 HasApiTokens
特征到 User
模型后正常工作,如下所述。
/login
仍然失败,直到修复此行的错字:
$tokenResult = $user->createToken('authToken')->plaitTextToken;
plaitTextToken
拼写错误。应该是:plainTextToken
。
这些是 AuthController
上缺少的导入:
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Validator;
另外,请务必:
将Laravel\Sanctum\HasApiTokens
特征添加到User
模型
将 Sanctum 所需的中间件添加到 ./app/Http/Kernel.php
的 api
中间件组下
发布和运行 Laravel Sanctum 迁移
所有这些都在 Laravel Sanctum 安装指南中列出,请务必严格按照安装指南进行操作:
https://laravel.com/docs/8.x/sanctum#installation
应用上述更改后,我尝试使用 PHPStorm HTTP 客户端使用这些请求:
POST http://my-app.test/api/v1/register
Accept: application/json
Content-Type: application/json
"name": "bar", "email": "bar@example.com", "password": "password"
###
POST http://my-app.test/api/v1/login
Accept: application/json
Content-Type: application/json
"email": "bar@example.com", "password": "password"
###
这些对应的响应:
POST http://my-app.test/api/v1/register
HTTP/1.1 200 OK
Server: nginx/1.18.0 (Ubuntu)
Content-Type: application/json
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
Cache-Control: no-cache, private
Date: Sun, 29 Nov 2020 01:26:22 GMT
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 59
Access-Control-Allow-Origin: *
"status_code": 200,
"message": "User Registration Successful."
Response code: 200 (OK); Time: 80ms; Content length: 61 bytes
和
POST http://my-app.test/api/v1/login
HTTP/1.1 200 OK
Server: nginx/1.18.0 (Ubuntu)
Content-Type: application/json
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
Cache-Control: no-cache, private
Date: Sun, 29 Nov 2020 01:27:17 GMT
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 58
Access-Control-Allow-Origin: *
"status_code": 200,
"token": "1|5ImkzdVQgNhQyotxlZzs5Hr2YDkTPKfpfovthx1o"
Response code: 200 (OK); Time: 86ms; Content length: 72 bytes
【讨论】:
让我再试一次。必须删除错字。在此共享服务器上,我没有错误或调试日志。一旦我再次测试它,让我更新你..谢谢 @RonnieDepp 您应该在应用程序根文件夹下有一个名为./storage/logs
的可写文件夹。否则 Laravel 每次尝试向日志写入内容时都会崩溃,例如发生异常时。我说的不是系统日志,而是常规的应用程序日志。另外请阅读完整的回复,不仅仅是错字,缺少导入和特征,而且我不确定您是否拥有正确安装 Sanctum 后运行迁移所需的所有表。
Storage/logs 全部为 755。但仍然没有一个日志。存储文件夹有视图、会话、缓存,都是 Laravel 创建的更新日期/时间文件。一旦我按照您的描述成功实施它,我将更新您。我还在主要问题中附上了 DB-SCHEMA 的图像。
我卡住了。每当我将 Auth:Sanctum 中间件添加到 API 路由组时,我都会收到 500 内部服务器错误。没有 laravel 自动记录的错误详细信息。这是我的移动应用程序,它将发出 api 请求。 SinglePageApplication SPA 也将访问这些 API 路由。 laravel.log 文件仅在我明确 Log::error("some error occurred"); - 导入 done - 错字更正 - sanctum 中间件添加到内核文件。 - 特征添加到模型。 - auth:sanctum 之外的路线在启用 Sanctum 后无法访问。
表 personal_access_tokens 为空。以上是关于Laravel v8.15.0 (PHP v7.3.23) 共享服务器上的移动应用程序 API POST 路由不起作用的主要内容,如果未能解决你的问题,请参考以下文章
如何打开未使用 -v7.3 标志保存的大型 .mat 文件?
php [Laravel Logs] Como loguear cosas con laravel #laravel #php