only('phone'); $rules = [ 'phone' => 'required|digits:10|unique:users' ]; $validator = Validator::make($credentials, $rules); // create user if not exist $user = User::firstOrNew([ 'phone' => $request->phone ]); $user->save(); // create token if not exist, update if exist $token = mt_rand(0000,9999); $user_verification = $user->phoneVerification()->firstOrNew([ 'user_id' => $user->id, ]); $user_verification->token = $token; $user_verification->save(); // send token to phone // ** switching to nexmo ** //$message = "IZYIM verification code : ". $token; //$twilio = new Twilio(env('TWILIO_ACC'), env('TWILIO_TOKEN'), env('TWILIO_NUMBER')); //$twilio->message($request->phone, $message); return response()->json(['success'=> true, 'message'=> 'A verification code has been send to your mobile number.' ]); } /** * API Verify User * * @param Request $request * @return \Illuminate\Http\JsonResponse */ public function verifyUser(Request $request) { $credentials = $request->only('phone', 'token'); // check if user already verified $check_user = User::where('phone', $request->phone)->first(); if(!is_null($check_user)){ if($check_user->is_verified == 1){ return response()->json([ 'success'=> true, 'message'=> 'Account already verified.' ]); } } else{ return response()->json([ 'success'=> false, 'message'=> 'Please contact support.' ]); } // check and verify valid token $check_token = $check_user->phoneVerification()->where('token', $request->token)->first(); if(!is_null($check_token)){ $check_user->is_verified = 1; $check_user->save(); $check_token->delete(); return response()->json([ 'success'=> true, 'message'=> 'Completed' ]); } return response()->json(['success'=> false, 'error'=> "Verification code is invalid."]); } /** * API Register * * @param Request $request * @return \Illuminate\Http\JsonResponse */ public function register(Request $request) { $credentials = $request->only('name', 'phone', 'password', 'confirm_password'); $rules = [ 'name' => 'required|max:255', 'phone' => 'required|digits:10|unique:users', 'password' => 'required|confirmed|min:6' ]; $validator = Validator::make($credentials, $rules); if($validator->fails()) { return response()->json(['success'=> false, 'error'=> $validator->messages()]); } $name = $request->name; $phone = "+6" . $request->phone; $password = $request->password; $user = User::create(['name' => $name, 'phone' => $phone, 'password' => Hash::make($password)]); $verification_code = rand (0000,9999); //Generate verification code DB::table('user_verifications')->insert(['user_id'=>$user->id,'token'=>$verification_code]); // send SMS $message = "IZYIM verification code : 12332"; $twilio = new Twilio(env('TWILIO_ACC'), env('TWILIO_TOKEN'), env('TWILIO_NUMBER')); $twilio->message($phone, $message); return response()->json(['success'=> true, 'message'=> 'A verification code has been send to your mobile number.']); } /** * API Login, on success return JWT Auth token * * @param Request $request * @return \Illuminate\Http\JsonResponse */ public function login(Request $request) { $credentials = $request->only('phone', 'password'); $rules = [ 'phone' => 'required|digits:10|unique:users', '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.'] ]); } }