only('name', 'email', 'password'); $rules = [ 'name' => 'required|max:255', 'email' => 'required|email|max:255|unique:users' ]; $validator = Validator::make($credentials, $rules); if($validator->fails()) { return response()->json(['success'=> false, 'error'=> $validator->messages()]); } $name = $request->name; $email = $request->email; $password = $request->password; $user = User::create(['name' => $name, 'email' => $email, 'password' => Hash::make($password)]); $verification_code = str_random(30); //Generate verification code DB::table('user_verifications')->insert(['user_id'=>$user->id,'token'=>$verification_code]); $subject = "Please verify your email address."; /* Mail::send('email.verify', ['name' => $name, 'verification_code' => $verification_code], function($mail) use ($email, $name, $subject){ $mail->from(getenv('FROM_EMAIL_ADDRESS'), "From User/Company Name Goes Here"); $mail->to($email, $name); $mail->subject($subject); }); */ return response()->json(['success'=> true, 'message'=> 'Thanks for signing up! Please check your email to complete your registration.']); } /** * API Login, on success return JWT Auth token * * @param Request $request * @return \Illuminate\Http\JsonResponse */ public function login(Request $request) { $credentials = $request->only('email', 'password'); $rules = [ 'email' => 'required|email', 'password' => 'required', ]; $validator = Validator::make($credentials, $rules); if($validator->fails()) { return response()->json(['success'=> false, 'error'=> $validator->messages()]); } $credentials['is_verified'] = 1; 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. Please make sure you entered the right information and you have verified your email address.'], 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) { //Return with error $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.'] ]); } /** * API Verify User * * @param Request $request * @return \Illuminate\Http\JsonResponse */ public function verifyUser($verification_code) { $check = DB::table('user_verifications')->where('token',$verification_code)->first(); if(!is_null($check)){ $user = User::find($check->user_id); if($user->is_verified == 1){ return response()->json([ 'success'=> true, 'message'=> 'Account already verified..' ]); } $user->update(['is_verified' => 1]); DB::table('user_verifications')->where('token',$verification_code)->delete(); return response()->json([ 'success'=> true, 'message'=> 'You have successfully verified your email address.' ]); } return response()->json(['success'=> false, 'error'=> "Verification code is invalid."]); } }