only('username', 'password'); $rules = [ 'username' => 'required|max:255|unique:users', 'email' => 'required|email|max:255|unique:users', ]; $validator = Validator::make($credentials, $rules); if($validator->fails()) { return response()->json(['success'=> false, 'error'=> $validator->messages()]); } $username = $request->username; $email = $request->email; $password = $request->password; $country = $request->country; $gender = $request->gender; User::create([ 'username' => $username, 'email' => $email, 'password' => Hash::make($password), 'country' => $country, 'gender' => $gender ]); return $this->login($request); } /** * API Login, on success return JWT Auth token * * @param Request $request * @return \Illuminate\Http\JsonResponse */ public function login(Request $request) { $credentials = $request->only('username', 'password'); $rules = [ 'username' => 'required', 'password' => 'required', ]; $validator = Validator::make($credentials, $rules); if($validator->fails()) { return response()->json(['success'=> false, 'error'=> $validator->messages()]); } try { // attempt to verify the credentials and create a token for the user if (!$token = JWTAuth::attempt($credentials)) { return response()->json(['success' => false, 'error' => 'We cant find an account with this credentials.'], 401); } } catch (JWTException $e) { // something went wrong whilst attempting to encode the token return response()->json(['success' => false, 'error' => 'Failed to login, please try again.'], 500); } // all good so return the token return response()->json(['success' => true, 'data'=> [ 'token' => $token ]]); } /** * Log out * Invalidate the token, so user cannot use it anymore * They have to relogin to get a new token * * @param Request $request */ public function logout(Request $request) { $this->validate($request, ['token' => 'required']); try { JWTAuth::invalidate($request->input('token')); return response()->json(['success' => true, 'message'=> 'You have successfully logged out.']); } catch (JWTException $e) { // something went wrong whilst attempting to encode the token return response()->json(['success' => false, 'error' => 'Failed to logout, please try again.'], 500); } } /** * API Recover Password * * @param Request $request * @return \Illuminate\Http\JsonResponse */ public function recover(Request $request) { $user = User::where('email', $request->email)->first(); if (!$user) { $error_message = "Your email address was not found."; return response()->json(['success' => false, 'error' => ['email'=> $error_message]], 401); } try { Password::sendResetLink($request->only('email'), function (Message $message) { $message->subject('Your Password Reset Link'); }); } catch (\Exception $e) { $error_message = $e->getMessage(); return response()->json(['success' => false, 'error' => $error_message], 401); } return response()->json([ 'success' => true, 'data'=> ['message'=> 'A reset email has been sent! Please check your email.'] ]); } public function checkAuth(Request $request) { $this->validate($request, ['token' => 'required']); try { $res = JWTAuth::parseToken()->authenticate(); return response()->json(['success' => true, 'user_id' => $res->id]); } catch (JWTException $e) { return response()->json(['success' => false, 'error' => 'Failed to check, please try again.'], 500); } } } ?>