validate([ 'email' => 'required|string|email', 'password' => 'required|string', 'remember_me' => 'boolean' ]); $credentials = request(['email', 'password']); if (!Auth::attempt($credentials)) return response()->json([ 'message' => 'Unauthorized' ], 401); $user = $request->user(); $tokenResult = $user->createToken('Personal Access Token'); $token = $tokenResult->token; if ($request->remember_me) $token->expires_at = Carbon::now()->addWeeks(1); $token->save(); return response()->json([ 'access_token' => $tokenResult->accessToken, 'token_type' => 'Bearer', 'expires_at' => Carbon::parse( $tokenResult->token->expires_at )->toDateTimeString() ]); } public function store(Request $request) { $data = $request->validate([ 'username' => ['required', 'string', 'max:255'], 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], 'password' => ['required', 'string', 'min:8'], ]); $user = Authentication::create([ 'username' => $data['username'], 'email' => $data['email'], 'password' => Hash::make($data['password']), ]); return response()->json($user, 201); } public function logout(Request $request) { if (Auth::check()) { Auth::user()->AauthAcessToken()->delete(); } return response()->json([ 'message' => 'Successfully logged out' ]); } /** * Create token password reset * * @param [string] email * @return [string] message */ public function create(Request $request) { $request->validate([ 'email' => 'required|string|email', ]); $user = Authentication::where('email', $request->email)->first(); if (!$user) return response()->json([ 'message' => "We can't find a user with that e-mail address." ], 404); $passwordReset = PasswordReset::updateOrCreate( ['email' => $user->email], [ 'email' => $user->email, 'token' => Str::random(60) ] ); if ($user && $passwordReset) $user->notify( new PasswordResetRequest($passwordReset->token) ); return response()->json([ 'message' => 'We have e-mailed your password reset link!' ]); } /** * Find token password reset * * @param [string] $token * @return [string] message * @return [json] passwordReset object */ public function find($token) { $passwordReset = PasswordReset::where('token', $token) ->first(); if (!$passwordReset) return response()->json([ 'message' => 'This password reset token is invalid.' ], 404); if (Carbon::parse($passwordReset->updated_at)->addMinutes(720)->isPast()) { $passwordReset->delete(); return response()->json([ 'message' => 'This password reset token is invalid.' ], 404); } return response()->json($passwordReset); } /** * Reset password * * @param [string] email * @param [string] password * @param [string] password_confirmation * @param [string] token * @return [string] message * @return [json] user object */ public function reset(Request $request) { $request->validate([ 'email' => 'required|string|email', 'password' => 'required|string|confirmed', 'token' => 'required|string' ]); $passwordReset = PasswordReset::where([ ['token', $request->token], ['email', $request->email] ])->first(); if (!$passwordReset) return response()->json([ 'message' => 'This password reset token is invalid.' ], 404); $user = Authentication::where('email', $passwordReset->email)->first(); if (!$user) return response()->json([ 'message' => "We can't find a user with that e-mail address." ], 404); $user->password = bcrypt($request->password); $user->save(); $passwordReset->delete(); $user->notify(new PasswordResetSuccess($passwordReset)); return response()->json($user); } /** * Get the authenticated User * * @return [json] user object */ public function user(Request $request) { return response()->json($request->user()); } /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { // } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ // public function create() // { // // // } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ // public function store(Request $request) // { // // // } /** * Display the specified resource. * * @param \App\Auth $auth * @return \Illuminate\Http\Response */ public function show(Auth $auth) { // } /** * Show the form for editing the specified resource. * * @param \App\Auth $auth * @return \Illuminate\Http\Response */ public function edit(Auth $auth) { // } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param \App\Auth $auth * @return \Illuminate\Http\Response */ public function update(Request $request, Auth $auth) { // } /** * Remove the specified resource from storage. * * @param \App\Auth $auth * @return \Illuminate\Http\Response */ public function destroy(Auth $auth) { // } }