blue-twilight/app/Http/Controllers/Auth/LoginController.php

127 lines
3.4 KiB
PHP

<?php
namespace App\Http\Controllers\Auth;
use App\Facade\Theme;
use App\Facade\UserConfig;
use App\Http\Controllers\Controller;
use App\User;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Laravel\Socialite\Two\FacebookProvider;
use Socialite;
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 / registration.
*
* @var string
*/
protected $redirectTo = '/';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest', ['except' => 'logout']);
}
protected function credentials(Request $request)
{
$result = $request->only($this->username(), 'password');
// Only allow activated users to login
$result['is_activated'] = true;
return $result;
}
/**
* Show the application's login form.
*
* @return \Illuminate\Http\Response
*/
public function showLoginForm(Request $request)
{
return Theme::render('auth.v2_unified', [
'active_tab' => 'login',
'info' => $request->session()->get('info')
]);
}
/**
* Redirect the user to the Facebook authentication page.
*
* @return \Illuminate\Http\Response
*/
public function redirectToFacebook()
{
$socialite = $this->setSocialiteConfigs();
return $socialite->driver('facebook')->redirect();
}
/**
* Obtain the user information from Facebook.
*
* @return \Illuminate\Http\Response
*/
public function handleFacebookCallback(Request $request)
{
$socialite = $this->setSocialiteConfigs();
$facebookUser = $socialite->driver('facebook')->user();
$user = User::where('facebook_id', $facebookUser->id)->first();
if (is_null($user))
{
$request->getSession()->put('registerData', [
'name' => $facebookUser->name,
'email' => $facebookUser->email,
'facebook_id' => $facebookUser->id,
'is_activated' => true
]);
return redirect(route('register'));
}
$this->guard()->login($user);
return redirect(route('home'));
}
private function setSocialiteConfigs()
{
// Force Socialite to use our config from the database instead of hard-coded in config/services.php
$socialite = app()->make('Laravel\Socialite\Contracts\Factory');
$socialite->extend(
'facebook',
function ($app) use ($socialite) {
$config = [
'client_id' => UserConfig::get('facebook_app_id'),
'client_secret' => decrypt(UserConfig::get('facebook_app_secret')),
'redirect' => route('login_callback.facebook')
];
return $socialite->buildProvider(FacebookProvider::class, $config);
}
);
return $socialite;
}
}