AuthController.php 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. <?php
  2. namespace App\Http\Controllers\api\procurement\wechat;
  3. use Illuminate\Support\Facades\Auth;
  4. use App\Http\Controllers\Controller;
  5. class AuthController extends Controller
  6. {
  7. /**
  8. * Create a new AuthController instance.
  9. * 要求附带email和password(数据来源users表)
  10. *
  11. * @return void
  12. */
  13. public function __construct()
  14. {
  15. // 这里额外注意了:官方文档样例中只除外了『login』
  16. // 这样的结果是,token 只能在有效期以内进行刷新,过期无法刷新
  17. // 如果把 refresh 也放进去,token 即使过期但仍在刷新期以内也可刷新
  18. // 不过刷新一次作废
  19. $this->middleware('auth:api', ['except' => ['login']]);
  20. // 另外关于上面的中间件,官方文档写的是『auth:api』
  21. // 但是我推荐用 『jwt.auth』,效果是一样的,但是有更加丰富的报错信息返回
  22. }
  23. /**
  24. * Get a JWT via given credentials.
  25. *
  26. * @return \Illuminate\Http\JsonResponse
  27. */
  28. public function login()
  29. {
  30. $credentials = request(['name', 'password']);
  31. if (! $token = auth('api')->attempt($credentials)) {
  32. return response()->json(['error' => '很抱歉,您的用户名和密码不匹配'], 401);
  33. }
  34. return $this->respondWithToken($token);
  35. }
  36. /**
  37. * Get the authenticated User.
  38. *
  39. * @return \Illuminate\Http\JsonResponse
  40. */
  41. public function me()
  42. {
  43. return response()->json(auth('api')->user());
  44. }
  45. /**
  46. * Log the user out (Invalidate the token).
  47. *
  48. * @return \Illuminate\Http\JsonResponse
  49. */
  50. public function logout()
  51. {
  52. auth('api')->logout();
  53. return response()->json(['message' => 'Successfully logged out']);
  54. }
  55. /**
  56. * Refresh a token.
  57. * 刷新token,如果开启黑名单,以前的token便会失效。
  58. * 值得注意的是用上面的getToken再获取一次Token并不算做刷新,两次获得的Token是并行的,即两个都可用。
  59. * @return \Illuminate\Http\JsonResponse
  60. */
  61. public function refresh()
  62. {
  63. return $this->respondWithToken(auth('api')->refresh());
  64. }
  65. /**
  66. * Get the token array structure.
  67. *
  68. * @param string $token
  69. *
  70. * @return \Illuminate\Http\JsonResponse
  71. */
  72. protected function respondWithToken($token)
  73. {
  74. return response()->json([
  75. 'access_token' => $token,
  76. 'token_type' => 'bearer',
  77. 'expires_in' => auth('api')->factory()->getTTL() * 60
  78. ]);
  79. }
  80. }