/
home
/
obinna
/
html
/
cravings
/
app
/
Http
/
Controllers
/
Auth
/
Upload File
HOME
<?php namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; use Socialite; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Storage; use Illuminate\Http\Request; use Illuminate\Foundation\Auth\AuthenticatesUsers; use App\User; use Illuminate\Http\JsonResponse; use Google_Client; class LoginController extends Controller { /* |-------------------------------------------------------------------------- | Login Controller |-------------------------------------------------------------------------- | | This controller handles authenticating users for the application and | redirecting them to your home screen. The controller uses a trait | to conveniently provide its functionality to your applications. | */ use AuthenticatesUsers; /** * Where to redirect users after login. * * @var string */ protected $redirectTo = '/'; /** * Create a new controller instance. * * @return void */ public function __construct() { $this->middleware('guest')->except('logout'); } /** * Show the application's login form. * * @return \Illuminate\Http\Response */ public function showLoginForm(Request $request) { return view('auth.login', ['page' => 'User']); } public function showApiLogin(Request $request){ return view('auth.app_login'); } public function apiLogin(Request $request) { $data = json_decode($request->getContent(), true); $loggedIn = $this->guard()->attempt(['email' => $data['email'], 'password' => $data['password']]); if ($loggedIn) { return $this->checkRequest($request); } return response()->json(['status' => 'failed', 'message' => 'Email and/or password incorrect']); } protected function credentials(Request $request) { $credentials = [ $this->username() => strtolower($request->get($this->username())), "password" => $request->get("password") ]; return $credentials; } public function redirectToProvider($provider) { // return response()->json($request->getContent()); // $this->request = $request; return Socialite::driver($provider)->redirect(); } /** * Obtain the user information from provider. Check if the user already exists in our * database by looking up their provider_id in the database. * If the user exists, log them in. Otherwise, create a new user then log them in. After that * redirect them to the authenticated users homepage. * * @return Response */ public function handleProviderCallback($provider) { $user = Socialite::driver($provider)->user(); $authUser = $this->findOrCreateUser($user, $provider); Auth::login($authUser, true); return redirect()->intended($this->redirectTo); } public function deleteProviderUserData($id) { } public function slugify($str) { return strtolower(implode("-", explode(" ", $str))); } public function handleOneTapLogin(Request $request) { // TODO: Log in user using One Tap Login // $client = new Google_Client(['client_id' => env('GOOGLE_APP_ID')]); // $payload = $client->verifyIdToken($request->get('id_token')); // if ($payload) { // $user = User::where('email', $payload['email'])->first(); // if ($user) { // Auth::login($user); // return $this->checkRequest($request); // } // return response()->json(['status' => 'failed', 'message' => 'User not found']); // } } /** * If a user has registered before using social auth, return the user * else, create a new user object. * @param $user Socialite user object * @param $provider Social auth provider * @return User */ private function findOrCreateUser($user, $provider) { $authUser = User::where('email', $user->email)->first(); if ($authUser) { return $authUser; } $fileUrl = "users/" . $this->slugify($user->getNickname() ?? $user->getName()) . ".jpg"; $img = $user->getAvatar(); $filePath = $img ? Storage::put($fileUrl, file_get_contents($img)) : '/images/user.svg'; return User::create([ 'name' => $user->getName(), 'nickname' => $user->getNickname(), 'email' => $user->getEmail(), 'avatar' => $filePath, 'provider' => $provider, 'provider_id' => $user->getId(), 'created_at' => (new \DateTime('now', new \DateTimeZone('Africa/Lagos')))->format('Y-m-d H:i:s') ]); } protected function authenticated(Request $request, $user) { // var_dump($user->role);die; if($user->role == 'tester') { // var_dump($user->role);die; return redirect('/test/start'); } return null; } /** * Send the response after the user was authenticated. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse */ protected function sendLoginResponse(Request $request) { $request->session()->regenerate(); $this->clearLoginAttempts($request); if ($response = $this->authenticated($request, $this->guard()->user())) { // var_dump('fi4');die; return $response; } return $request->wantsJson() ? new JsonResponse([], 204) : redirect()->intended($this->redirectPath())->with('status', 'Logged in'); } /** * Get the failed login response instance. * * @param \Illuminate\Http\Request $request * @return \Symfony\Component\HttpFoundation\Response * * @throws \Illuminate\Validation\ValidationException */ protected function sendFailedLoginResponse(Request $request) { // var_dump(trans('auth.failed'));die; return view('auth.login', ['error' => 'Invalid email and/or password', 'fields' => $request->all()]); // return redirect()->back()->withErrors(['email' => trans('Invalid email and/or password')]); } /** * Log the user out of the application. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse */ public function logout(Request $request) { $this->guard()->logout(); $request->session()->invalidate(); $request->session()->regenerateToken(); if ($response = $this->loggedOut($request)) { return $response; } return $request->wantsJson() ? new JsonResponse([], 204) : redirect()->route('login'); } }