diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php index 177a782..6592973 100644 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -152,6 +152,19 @@ class LoginController extends Controller return $this->processSocialMediaLogin($request, 'facebook_id', $facebookUser); } + /** + * Obtain the user information from Twitter. + * + * @return \Illuminate\Http\Response + */ + public function handleTwitterCallback(Request $request) + { + $socialite = $this->setSocialiteConfigs(); + $twitterUser = $socialite->driver('twitter')->user(); + + return $this->processSocialMediaLogin($request, 'twitter_id', $twitterUser); + } + private function processSocialMediaLogin(Request $request, $socialMediaIdField, $socialMediaUser) { $userBySocialMediaId = User::where($socialMediaIdField, $socialMediaUser->getId())->first(); @@ -163,20 +176,25 @@ class LoginController extends Controller return redirect(route('home')); } - $userByEmailAddress = User::where('email', $socialMediaUser->email)->first(); - - if (!is_null($userByEmailAddress)) + // Some providers (*cough*Twitter*cough*) don't give e-mail addresses without explicit permission/additional + // verification + if (!is_null($socialMediaUser->email)) { - // We have an existing user with the e-mail address associated with the Facebook account - // Prompt for the password for that account - $request->getSession()->put('ssoLoginData', [ - 'name' => $socialMediaUser->getName(), - 'email' => $socialMediaUser->getEmail(), - $socialMediaIdField => $socialMediaUser->getId(), - 'is_activated' => true - ]); + $userByEmailAddress = User::where('email', $socialMediaUser->getEmail())->first(); - return redirect(route('auth.login_sso')); + if (!is_null($userByEmailAddress)) + { + // We have an existing user with the e-mail address associated with the Facebook account + // Prompt for the password for that account + $request->getSession()->put('ssoLoginData', [ + 'name' => $socialMediaUser->getName(), + 'email' => $socialMediaUser->getEmail(), + $socialMediaIdField => $socialMediaUser->getId(), + 'is_activated' => true + ]); + + return redirect(route('auth.login_sso')); + } } // We don't have an existing user - prompt for registration diff --git a/app/User.php b/app/User.php index 72f3a42..f9c93ed 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', 'enable_profile_page', 'profile_alias', 'facebook_id' + 'name', 'email', 'password', 'is_admin', 'is_activated', 'activation_token', 'enable_profile_page', 'profile_alias', 'facebook_id', 'twitter_id' ]; /** diff --git a/database/migrations/2018_08_16_132300_add_user_twitter_id_column.php b/database/migrations/2018_08_16_132300_add_user_twitter_id_column.php new file mode 100644 index 0000000..092d8df --- /dev/null +++ b/database/migrations/2018_08_16_132300_add_user_twitter_id_column.php @@ -0,0 +1,34 @@ +string('twitter_id')->nullable(true); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('users', function (Blueprint $table) + { + $table->dropColumn('twitter_id'); + }); + } +} diff --git a/resources/views/themes/base/partials/register.blade.php b/resources/views/themes/base/partials/register.blade.php index c9b3704..8e7157e 100644 --- a/resources/views/themes/base/partials/register.blade.php +++ b/resources/views/themes/base/partials/register.blade.php @@ -16,7 +16,7 @@
- + @if ($errors->has('name'))
@@ -30,11 +30,11 @@
- @if ($is_sso) + @if ($is_sso && !empty($register_data['email'])) @else - + @endif @if ($errors->has('email')) @@ -49,7 +49,7 @@
- + @if ($errors->has('password'))