TokenController.php 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: qiuzijian
  5. * Date: 4/1/22
  6. * Time: 6:29 PM
  7. */
  8. namespace Modules\Admin\Http\Controllers\Api;
  9. use App\Enum\ApiEnum;
  10. use App\Http\Controllers\Controller;
  11. use Illuminate\Http\Request;
  12. use Modules\Admin\Entities\User;
  13. use Modules\Admin\Http\Requests\TokenRequest;
  14. use Modules\Staff\Entities\Staff;
  15. use Symfony\Component\HttpFoundation\Response;
  16. class TokenController extends Controller
  17. {
  18. public function token(Request $request)
  19. {
  20. $result['status'] = true;
  21. $result['msg'] = ApiEnum::RETURN_SUCCESS;
  22. $result['data'] = [];
  23. $username = $request->input('username');
  24. $user = \App\User::where('staff_num', $username)->first();
  25. if (!$user) {
  26. return $this->error(1001, '用户不存在');
  27. }
  28. $result = $this->issueToken($request, 'password');
  29. if ($result->getStatusCode() == 401) {
  30. return $this->error(1002, '密码错误');
  31. }
  32. $data = json_decode($result->getContent(), true);
  33. $result = [
  34. 'code' => 0,
  35. 'message' => 'SUCCESS',
  36. 'data' => $data
  37. ];
  38. return response()->json($result);
  39. }
  40. protected function error($code = 1, $msg = '')
  41. {
  42. return [
  43. 'code' => $code,
  44. 'message' => $msg,
  45. ];
  46. }
  47. /**
  48. * Passport 接口请求
  49. * @param Request $request
  50. * @param $grant_type
  51. * @param string $provider
  52. * @param string $scope
  53. * @return Response
  54. */
  55. protected function issueToken(Request $request, $grant_type, $provider = 'users', $scope = '*'): Response
  56. {
  57. $client = config('passport.password');
  58. $params = [
  59. 'grant_type' => $grant_type,
  60. 'client_id' => $client['client_id'],
  61. 'client_secret' => $client['client_secret'],
  62. 'username' => $request->username ?: $request->email,
  63. 'password' => $request->password,
  64. 'provider' => $provider,
  65. 'scope' => $scope,
  66. ];
  67. $proxy = $request::create('oauth/token', 'POST');
  68. $proxy->request->add($params);
  69. return app()->handle($proxy);
  70. }
  71. }