LoginController.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. <?php
  2. namespace App\Http\ApiControllers;
  3. use App\User;
  4. use Illuminate\Http\JsonResponse;
  5. use Illuminate\Http\Request;
  6. use Illuminate\Http\Response;
  7. use Illuminate\Support\Facades\Auth;
  8. use Illuminate\Support\Facades\Hash;
  9. class LoginController
  10. {
  11. /**
  12. * @api {post} /login 登录接口
  13. * @apiName login
  14. * @apiGroup User
  15. *
  16. * @apiParam {string} username 用户名
  17. * @apiParam {string} password 用户密码,需要base64加密
  18. *
  19. * @apiSuccess {string} message 响应描述
  20. * @apiSuccess {int} status_code HTTP响应码
  21. * @apiSuccess {string} data.token 认证token
  22. * @apiSuccess {String} data.menu 菜单JSON
  23. *
  24. * @apiSuccessExample {json} Success-Response:
  25. * HTTP/1.1 200 OK
  26. * {
  27. * "message": "请求成功",
  28. * "status_code": "200"
  29. * "data":{
  30. * "toke":"token",
  31. * "menu":"{}",
  32. * }
  33. * }
  34. */
  35. public function login(Request $request):JsonResponse
  36. {
  37. $userName = $request->get('username','');
  38. $password = $request->get('password','');
  39. $users = User::query()->where("name",$userName)->orWhereHas("userDetail",function ($query)use($userName){
  40. $query->where("mobile_phone",$userName);
  41. })->get();
  42. $response = [
  43. 'message' => '请求成功',
  44. 'status_code' => 200,
  45. ];
  46. $user = null;
  47. foreach ($users as $item){
  48. if (Hash::check(base64_decode($password),$item->password)){
  49. $user = $item;
  50. break;
  51. }
  52. }
  53. //验证用户登录
  54. if (!$user){
  55. $response["message"] = "用户名或密码错误";
  56. $response["status_code"] = 410;
  57. return response()->json($response);
  58. }
  59. //获取公私钥
  60. try {
  61. $privateKey = file_get_contents(base_path().'/private.pem');
  62. }catch (\Exception $e){
  63. $response["status_code"] = 410;
  64. if (strpos($e->getMessage(),"No such file or directory")!==false)$response["message"] = "服务器异常,资源丢失";
  65. else $response["message"] = "访问某些资源失败";
  66. return response()->json($response);
  67. }
  68. try {
  69. $token = app("UserService")->getJWTToken($user,$privateKey);
  70. //单点登录标记
  71. app("UserService")->setSingleTag($user->id,$token);
  72. $response["data"] = ["token"=>$token,
  73. "menu"=>$this->getMenu($user),"info"=>["id"=>$user->id,"name"=>$user->name]];
  74. app("UserService")->setOrRefreshCache($user);
  75. return response()->json($response);
  76. }catch (\Exception $e){
  77. $response["status_code"] = 409;
  78. $response["message"] = "资源异常,无法反馈";
  79. return response()->json($response);
  80. }
  81. }
  82. public function getUserInfo(Request $request)
  83. {
  84. $userName = $request->get('username','');
  85. $password = $request->get('password','');
  86. $users = User::query()->where("name",$userName)->orWhereHas("userDetail",function ($query)use($userName){
  87. $query->where("mobile_phone",$userName);
  88. })->get();
  89. $user = null;
  90. foreach ($users as $item){
  91. if (Hash::check($password,$item->password)){
  92. $user = $item;
  93. break;
  94. }
  95. }
  96. if (!$user){
  97. return response("用户不存在或密码错误", 401);
  98. }
  99. $user->load("userDetail");
  100. return response()->json([
  101. "id" => $user->id,
  102. "username" => $user->name,
  103. "name" => $user->userDetail->full_name ?? "",
  104. "sex" => $user->userDetail->gender ?? "",
  105. "id_card" => $user->userDetail->identity_number ?? "",
  106. "phone" => $user->userDetail->mobile_phone ?? "",
  107. ]);
  108. }
  109. public function resetNameOrPwd(Request $request)
  110. {
  111. $userId = $request->get('id');
  112. $userName = $request->get('username');
  113. $password = $request->get('password');
  114. $user = null;
  115. if (!$userId || (!$userName && !$password) || !$user = User::query()->find($userId)){
  116. return response("参数错误或用户不存在", 401);
  117. }
  118. $update = [];
  119. if ($userName) {
  120. $update["name"] = $userName;
  121. }
  122. if ($password) {
  123. $update["password"] = Hash::make($password);
  124. }
  125. if ($user->update($update)) {
  126. return response("OK");
  127. }
  128. return response("用户信息修改失败", 410);
  129. }
  130. private function getMenu($user)
  131. {
  132. Auth::setUser($user);
  133. $authorities = app("AuthorityService")->getUserAndroidAuthority();
  134. $result = [];
  135. foreach (app("AuthorityService")->format($authorities) as $authority){
  136. foreach ($authority["child"] as $authorityOne){
  137. $item = [];
  138. foreach ($authorityOne["child"] as $authorityTwo){
  139. $item[] = $authorityTwo["name"];
  140. }
  141. $result[$authorityOne["name"]] = $item;
  142. }
  143. }
  144. return json_encode($result,JSON_UNESCAPED_UNICODE);
  145. }
  146. }