我之前已经问过这个问题,但我正在寻找针对我的情况的回复。基本上,我已经构建了一个API。此API具有不受保护的登录路由
Route::post('login', 'Auth\AuthController@login');
我正在使用JWT进行身份验证,此登录路由需要一封电子邮件密码。该函数类似于以下
public function login(Request $request) {
$credentials = $request->only('email', 'password');
try {
if (! $token = JWTAuth::attempt($credentials)) {
return response()->json(['error' => 'invalid_credentials'], 401);
}
} catch (JWTException $e) {
return response()->json(['error' => 'could_not_create_token'], 500);
}
return response()->json(compact('token'), 200);
}
因此,如果凭据错误,则返回401.如果应用程序无法创建令牌,则返回500响应。如果成功创建令牌,则返回200。
从一开始这看起来不错。我的问题是,是否有必要进一步采取这一措施?例如,如果我注释掉路线,理论上它不再存在,Postman会返回一个Laravel错误
NotFoundHttpException in RouteCollection.php line 161:
现在我的路线不太可能消失,但如果服务器发生故障会发生什么?我是否希望向API用户显示Laravel错误,或者我是否可以通过某种方式处理此错误?
我真的在寻找关于在我的API中处理错误的最佳方法的建议。
由于
答案 0 :(得分:1)
crate API的最佳方式 在routes.php中添加路由
public function postLogin(Request $request)
{
$response = "";
$error_message = "";
$request->headers->set('content-type','application/json');
$request_data = $request->all();
$validator = $this->user_service->api_login_rules($request_data);
if($validator->fails())
{
$errors = $validator->getMessageBag()->toArray();
if(isset($errors['email']))
{
$error_message = $errors['email'][0];
}
else if(isset($errors['password']))
{
$error_message = $errors['password'][0];
}
$response = ['code' => 100, 'error-message' => $error_message];
return response()->json(['error' => $response]);
}
else
{
$email = $request_data['email'];
$password = $request_data['password'];
if (Auth::attempt(['email' => $email, 'password' => $password]))
{
$user_details = $this->user_service->getUserDetails($user_id);
return response()->json($response, 200, [], JSON_NUMERIC_CHECK);
}
else
{
$error_message = "Please enter correct password";
$response = ['code' => 100, 'error-message' => $error_message];
return response()->json(['error' => $response]);
}
}
在APIController.php中添加登录api
elif (mod == '2'):
print 'Mode 2 activated'
array = rndom(dat_entry)