| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- <?php
- namespace App\Http\Controllers\api\procurement\wechat;
- use App\UserDetail;
- use http\Client\Curl\User;
- use Illuminate\Support\Facades\Auth;
- use App\Http\Controllers\Controller;
- class AuthController extends Controller
- {
- /**
- * Create a new AuthController instance.
- * 要求附带email和password(数据来源users表)
- *
- * @return void
- */
- public function __construct()
- {
- // 这里额外注意了:官方文档样例中只除外了『login』
- // 这样的结果是,token 只能在有效期以内进行刷新,过期无法刷新
- // 如果把 refresh 也放进去,token 即使过期但仍在刷新期以内也可刷新
- // 不过刷新一次作废
- $this->middleware('auth:api', ['except' => ['login']]);
- // 另外关于上面的中间件,官方文档写的是『auth:api』
- // 但是我推荐用 『jwt.auth』,效果是一样的,但是有更加丰富的报错信息返回
- }
- /**
- * Get a JWT via given credentials.
- *
- * @return \Illuminate\Http\JsonResponse
- */
- public function login()
- {
- $phone=request('phone');
- $user_id=UserDetail::query()->where('mobile_phone',$phone)->value('user_id');
- if (!$user_id) return response()->json(['status'=>0,'error' => '当前用户不存在!'], 401);
- $supplierUser=\App\User::query()->whereHas('roles',function($query){
- $query->where('name','供应商');
- })->find($user_id);
- $receiveUser=\App\User::query()->whereHas('roles',function($query){
- $query->where('name','供应商');
- })->find($user_id);
- if (!$supplierUser && !$receiveUser) return response()->json(['status'=>0,'message' => '当前用户没有指定角色,暂不可登录!'], 401);
- $credentials = [
- 'id'=>$user_id,
- 'password'=>request('password')
- ];
- if (! $token = auth('api')->attempt($credentials)) {
- return response()->json(['status'=>0,'message' => '很抱歉,您的手机号和密码不匹配'], 401);
- }
- return response()->json(['status'=>1,'message' => $supplierUser?'1':'2','data'=>$token], 200);
- }
- /**
- * Get the authenticated User.
- *
- * @return \Illuminate\Http\JsonResponse
- */
- public function me()
- {
- return response()->json(auth('api')->user());
- }
- /**
- * Log the user out (Invalidate the token).
- *
- * @return \Illuminate\Http\JsonResponse
- */
- public function logout()
- {
- auth('api')->logout();
- return response()->json(['message' => 'Successfully logged out']);
- }
- /**
- * Refresh a token.
- * 刷新token,如果开启黑名单,以前的token便会失效。
- * 值得注意的是用上面的getToken再获取一次Token并不算做刷新,两次获得的Token是并行的,即两个都可用。
- * @return \Illuminate\Http\JsonResponse
- */
- public function refresh()
- {
- return $this->respondWithToken(auth('api')->refresh());
- }
- /**
- * Get the token array structure.
- *
- * @param string $token
- *
- * @return \Illuminate\Http\JsonResponse
- */
- protected function respondWithToken($token)
- {
- return response()->json([
- 'access_token' => $token,
- 'token_type' => 'bearer',
- 'expires_in' => auth('api')->factory()->getTTL() * 60
- ]);
- }
- }
|