2016-09-17 191 views
0

我知道这个问题以前曾被问过,但我正在寻找特定于我的情况的回复。基本上,我已经构建了一个API。这个API有一个未受保护的登录路由在API中处理错误

Route::post('login', 'Auth\[email protected]'); 

我使用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); 
} 

所以如果凭据是错误的,它如果应用程序是无法创建它返回一个500响应令牌返回401。如果令牌成功创建,它将返回一个200.

从一开始,这看起来没问题。我的问题是,是否有必要进一步采取这一措施?举例来说,如果我注释掉的路线,因此在理论上不再存在,邮差返回Laravel错误

NotFoundHttpException in RouteCollection.php line 161: 

现在是不太可能,我的路线会消失,但如果服务器停机或会出现什么情况?我是否想要向API用户显示Laravel错误,或者有什么方法可以处理?

真的,我正在寻找关于在我的API中处理错误的最佳方法的建议。

感谢

+0

我不能让你的问题?这里有什么问题?另外,如果服务器关闭,Laravel关闭,您需要一些低级错误处理。 –

+0

我真的应该处理所有不同类型的错误。作为一个例子,我给出了不正确的路线,这在邮差中显示了Laravel错误。 –

+0

Laravel默认情况下有一个非常好的错误处理程序,它主要处理所有错误。这是一个非常宽泛和有见地的问题。请阅读如何提问的指南。 –

回答

1

最佳箱子API 的方式routes.php文件

'api' => 'APIController', 

添加登录API添加路线APIController.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]); 
     } 
    }