| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- <?php
- namespace App\Http\ApiControllers;
- use App\User;
- use Illuminate\Http\JsonResponse;
- use Illuminate\Http\Request;
- use Illuminate\Http\Response;
- use Illuminate\Support\Facades\Auth;
- use Illuminate\Support\Facades\Hash;
- class LoginController
- {
- /**
- * @api {post} /login 登录接口
- * @apiName login
- * @apiGroup User
- *
- * @apiParam {string} username 用户名
- * @apiParam {string} password 用户密码,需要base64加密
- *
- * @apiSuccess {string} message 响应描述
- * @apiSuccess {int} status_code HTTP响应码
- * @apiSuccess {string} data.token 认证token
- * @apiSuccess {String} data.menu 菜单JSON
- *
- * @apiSuccessExample {json} Success-Response:
- * HTTP/1.1 200 OK
- * {
- * "message": "请求成功",
- * "status_code": "200"
- * "data":{
- * "toke":"token",
- * "menu":"{}",
- * }
- * }
- */
- public function login(Request $request):JsonResponse
- {
- $userName = $request->get('username','');
- $password = $request->get('password','');
- $users = User::query()->where("name",$userName)->orWhereHas("userDetail",function ($query)use($userName){
- $query->where("mobile_phone",$userName);
- })->get();
- $response = [
- 'message' => '请求成功',
- 'status_code' => 200,
- ];
- $user = null;
- foreach ($users as $item){
- if (Hash::check(base64_decode($password),$item->password)){
- $user = $item;
- break;
- }
- }
- //验证用户登录
- if (!$user){
- $response["message"] = "用户名或密码错误";
- $response["status_code"] = 410;
- return response()->json($response);
- }
- //获取公私钥
- try {
- $privateKey = file_get_contents(base_path().'/private.pem');
- }catch (\Exception $e){
- $response["status_code"] = 410;
- if (strpos($e->getMessage(),"No such file or directory")!==false)$response["message"] = "服务器异常,资源丢失";
- else $response["message"] = "访问某些资源失败";
- return response()->json($response);
- }
- try {
- $token = app("UserService")->getJWTToken($user,$privateKey);
- //单点登录标记
- app("UserService")->setSingleTag($user->id,$token);
- $response["data"] = ["token"=>$token,
- "menu"=>$this->getMenu($user),"info"=>["id"=>$user->id,"name"=>$user->name]];
- app("UserService")->setOrRefreshCache($user);
- return response()->json($response);
- }catch (\Exception $e){
- $response["status_code"] = 409;
- $response["message"] = "资源异常,无法反馈";
- return response()->json($response);
- }
- }
- public function getUserInfo(Request $request)
- {
- $userName = $request->get('username','');
- $password = $request->get('password','');
- $users = User::query()->where("name",$userName)->orWhereHas("userDetail",function ($query)use($userName){
- $query->where("mobile_phone",$userName);
- })->get();
- $user = null;
- foreach ($users as $item){
- if (Hash::check($password,$item->password)){
- $user = $item;
- break;
- }
- }
- if (!$user){
- return response("用户不存在或密码错误", 401);
- }
- $user->load("userDetail");
- return response()->json([
- "id" => $user->id,
- "username" => $user->name,
- "name" => $user->userDetail->full_name ?? "",
- "sex" => $user->userDetail->gender ?? "",
- "id_card" => $user->userDetail->identity_number ?? "",
- "phone" => $user->userDetail->mobile_phone ?? "",
- ]);
- }
- public function resetNameOrPwd(Request $request)
- {
- $userId = $request->get('id');
- $userName = $request->get('username');
- $password = $request->get('password');
- $user = null;
- if (!$userId || (!$userName && !$password) || !$user = User::query()->find($userId)){
- return response("参数错误或用户不存在", 401);
- }
- $update = [];
- if ($userName) {
- $update["name"] = $userName;
- }
- if ($password) {
- $update["password"] = Hash::make($password);
- }
- if ($user->update($update)) {
- return response("OK");
- }
- return response("用户信息修改失败", 410);
- }
- private function getMenu($user)
- {
- Auth::setUser($user);
- $authorities = app("AuthorityService")->getUserAndroidAuthority();
- $result = [];
- foreach (app("AuthorityService")->format($authorities) as $authority){
- foreach ($authority["child"] as $authorityOne){
- $item = [];
- foreach ($authorityOne["child"] as $authorityTwo){
- $item[] = $authorityTwo["name"];
- }
- $result[$authorityOne["name"]] = $item;
- }
- }
- return json_encode($result,JSON_UNESCAPED_UNICODE);
- }
- }
|