LoginController.php 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. <?php
  2. namespace App\Http\ApiControllers;
  3. use Illuminate\Foundation\Auth\User;
  4. use Illuminate\Http\JsonResponse;
  5. use Illuminate\Http\Request;
  6. use Illuminate\Support\Facades\Auth;
  7. use Illuminate\Support\Facades\Hash;
  8. class LoginController
  9. {
  10. /**
  11. * @api {post} /login 登录接口
  12. * @apiName login
  13. * @apiGroup User
  14. *
  15. * @apiParam {string} username 用户名
  16. * @apiParam {string} password 用户密码,需要base64加密
  17. *
  18. * @apiSuccess {string} message 响应描述
  19. * @apiSuccess {int} status_code HTTP响应码
  20. * @apiSuccess {string} data.token 认证token
  21. *
  22. * @apiSuccessExample {json} Success-Response:
  23. * HTTP/1.1 200 OK
  24. * {
  25. * "message": "请求成功",
  26. * "status_code": "200"
  27. * "data":{
  28. * "toke":"token"
  29. * }
  30. * }
  31. */
  32. public function login(Request $request):JsonResponse
  33. {
  34. $userName = $request->get('username','');
  35. $password = $request->get('password','');
  36. $user = User::query()->where("name",$userName)->first();
  37. $response = [
  38. 'message' => '请求成功',
  39. 'status_code' => 200,
  40. ];
  41. //验证用户登录
  42. if (!$user || !Hash::check(base64_decode($password),$user->password)){
  43. $response["message"] = "用户名或密码错误";
  44. $response["status_code"] = 401;
  45. return response()->json($response);
  46. }
  47. //获取公私钥
  48. try {
  49. $privateKey = file_get_contents(base_path().'/private.pem');
  50. }catch (\Exception $e){
  51. $response["status_code"] = 410;
  52. if (strpos($e->getMessage(),"No such file or directory")!==false)$response["message"] = "服务器异常,资源丢失";
  53. else $response["message"] = "访问某些资源失败";
  54. return response()->json($response);
  55. }
  56. try {
  57. $response["data"] = ["token"=>app("UserService")->getJWTToken($user,$privateKey),
  58. "menu"=>$this->getMenu($user)];
  59. app("UserService")->setOrRefreshCache($user);
  60. return response()->json($response);
  61. }catch (\Exception $e){
  62. $response["status_code"] = 409;
  63. $response["message"] = "资源异常,无法反馈";
  64. return response()->json($response);
  65. }
  66. }
  67. private function getMenu($user)
  68. {
  69. Auth::setUser($user);
  70. $authorities = app("AuthorityService")->getUserAndroidAuthority();
  71. $result = [];
  72. foreach (app("AuthorityService")->format($authorities) as $authority){
  73. foreach ($authority["child"] as $authorityOne){
  74. $item = [];
  75. foreach ($authorityOne["child"] as $authorityTwo){
  76. $item[] = $authorityTwo["name"];
  77. }
  78. $result[$authorityOne["name"]] = $item;
  79. }
  80. }
  81. return json_encode($result,JSON_UNESCAPED_UNICODE);
  82. }
  83. }