From 52473f846eb63389ec66c7b2a04cc8ac77a73b44 Mon Sep 17 00:00:00 2001 From: Andy Heathershaw Date: Mon, 13 Aug 2018 22:03:12 +0100 Subject: [PATCH] #5: Facebook social login now works. Added Facebook to the login screen template (I'm not 100% happy with this, may need a bit more work.) --- app/Http/Controllers/Auth/LoginController.php | 23 ++++++-- .../Controllers/Auth/RegisterController.php | 53 ++++++++++++------- app/User.php | 2 +- config/services.php | 2 +- ..._13_211541_add_user_facebook_id_column.php | 34 ++++++++++++ resources/lang/en/auth.php | 6 ++- .../themes/base/partials/login.blade.php | 8 +++ .../themes/base/partials/register.blade.php | 14 +++-- 8 files changed, 113 insertions(+), 29 deletions(-) create mode 100644 database/migrations/2018_08_13_211541_add_user_facebook_id_column.php diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php index 1161dd6..770afc3 100644 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers\Auth; use App\Facade\Theme; use App\Http\Controllers\Controller; +use App\User; use Illuminate\Foundation\Auth\AuthenticatesUsers; use Illuminate\Http\Request; use Socialite; @@ -78,11 +79,25 @@ class LoginController extends Controller * * @return \Illuminate\Http\Response */ - public function handleFacebookCallback() + public function handleFacebookCallback(Request $request) { - $user = Socialite::driver('facebook')->user(); - dd($user); + $facebookUser = Socialite::driver('facebook')->user(); + $user = User::where('facebook_id', $facebookUser->id)->first(); - // $user->token; + 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')); } } diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php index 7dd3d60..932765d 100644 --- a/app/Http/Controllers/Auth/RegisterController.php +++ b/app/Http/Controllers/Auth/RegisterController.php @@ -85,25 +85,22 @@ class RegisterController extends Controller */ protected function create(array $data) { - $activationData = [ - 'is_activated' => true - ]; - - if (UserConfig::get('require_email_verification')) + if (!isset($data['is_activated'])) { - $activationData['is_activated'] = false; - $activationData['activation_token'] = MiscHelper::randomString(); + $data['is_activated'] = true; + + if (UserConfig::get('require_email_verification')) + { + $data['is_activated'] = false; + $data['activation_token'] = MiscHelper::randomString(); + } } - return User::create(array_merge( - [ - 'name' => $data['name'], - 'email' => $data['email'], - 'password' => bcrypt($data['password']), - 'is_admin' => false - ], - $activationData - )); + $data['password'] = bcrypt($data['password']); + $data['is_admin'] = false; + unset($data['password_confirmation']); + + return User::create($data); } public function register(Request $request) @@ -115,8 +112,17 @@ class RegisterController extends Controller $this->validator($request)->validate(); + $userData = $request->all(); + + // Social media login info + $registerData = $request->getSession()->get('registerData'); + if (!is_null($registerData)) + { + $userData = array_merge($registerData, $userData); + } + /** @var User $user */ - $user = $this->create($request->all()); + $user = $this->create($userData); if ($user->is_activated) { @@ -137,15 +143,24 @@ class RegisterController extends Controller * * @return \Illuminate\Http\Response */ - public function showRegistrationForm() + public function showRegistrationForm(Request $request) { if (!UserConfig::get('allow_self_registration')) { return redirect(route('home')); } + // Social media login info + $registerData = $request->getSession()->get('registerData'); + if (is_null($registerData)) + { + $registerData['name'] = ''; + $registerData['email'] = ''; + } + return Theme::render('auth.v2_unified', [ - 'active_tab' => 'register' + 'active_tab' => 'register', + 'register_data' => $registerData ]); } } diff --git a/app/User.php b/app/User.php index 6cf4a92..72f3a42 100644 --- a/app/User.php +++ b/app/User.php @@ -16,7 +16,7 @@ class User extends Authenticatable * @var array */ protected $fillable = [ - 'name', 'email', 'password', 'is_admin', 'is_activated', 'activation_token', 'profile_alias' + 'name', 'email', 'password', 'is_admin', 'is_activated', 'activation_token', 'enable_profile_page', 'profile_alias', 'facebook_id' ]; /** diff --git a/config/services.php b/config/services.php index b7c6039..a99b3fb 100644 --- a/config/services.php +++ b/config/services.php @@ -17,7 +17,7 @@ return [ 'facebook' => [ 'client_id' => env('FACEBOOK_CLIENT_ID'), 'client_secret' => env('FACEBOOK_CLIENT_SECRET'), - 'redirect' => url('login/facebook/callback') + 'redirect' => php_sapi_name() != 'cli' ? url('login/facebook/callback') : '' ], 'gitea' => [ diff --git a/database/migrations/2018_08_13_211541_add_user_facebook_id_column.php b/database/migrations/2018_08_13_211541_add_user_facebook_id_column.php new file mode 100644 index 0000000..685d15f --- /dev/null +++ b/database/migrations/2018_08_13_211541_add_user_facebook_id_column.php @@ -0,0 +1,34 @@ +string('facebook_id')->nullable(true); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('users', function (Blueprint $table) + { + $table->dropColumn('facebook_id'); + }); + } +} diff --git a/resources/lang/en/auth.php b/resources/lang/en/auth.php index 5a61ca2..172bd1a 100644 --- a/resources/lang/en/auth.php +++ b/resources/lang/en/auth.php @@ -22,6 +22,8 @@ return [ 'Please click the link in this e-mail to activate your account.', 'change_password_action' => 'Change password', 'change_password_title' => 'Change your password', + 'email_password_login' => 'Alternatively, login with your e-mail address and password:', + 'email_password_register' => 'Alternatively, create an account using your e-mail address and a password:', 'forgot_password_action' => 'Send Reset E-mail', 'forgot_password_link' => 'Forgotten your password?', 'forgot_password_title' => 'Send password reset link', @@ -29,5 +31,7 @@ return [ 'recaptcha_failed_message' => 'The reCAPTCHA verfication failed. Please ensure you have completed the reCAPTCHA challenge and try again.', 'register_page_title' => 'Create an account', 'reset_password_action' => 'Reset Password', - 'reset_password_title' => 'Reset your password' + 'reset_password_title' => 'Reset your password', + 'social_login' => 'Feeling sociable? Login with:', + 'social_register' => 'Feeling sociable? Register with:' ]; diff --git a/resources/views/themes/base/partials/login.blade.php b/resources/views/themes/base/partials/login.blade.php index bc7c194..e61c2aa 100644 --- a/resources/views/themes/base/partials/login.blade.php +++ b/resources/views/themes/base/partials/login.blade.php @@ -1,3 +1,11 @@ +

@lang('auth.social_login')

+

+ + {{----}} +

+ +

@lang('auth.email_password_login')

+
{{ csrf_field() }} diff --git a/resources/views/themes/base/partials/register.blade.php b/resources/views/themes/base/partials/register.blade.php index a2198f4..ac55fc4 100644 --- a/resources/views/themes/base/partials/register.blade.php +++ b/resources/views/themes/base/partials/register.blade.php @@ -1,3 +1,11 @@ +

@lang('auth.social_register')

+

+ + {{----}} +

+ +

@lang('auth.email_password_register')

+ {{ csrf_field() }} @@ -5,7 +13,7 @@
- + @if ($errors->has('name'))
@@ -19,7 +27,7 @@
- + @if ($errors->has('email'))
@@ -33,7 +41,7 @@
- + @if ($errors->has('password'))