All Projects → schedula → laravel-passport-socialite

schedula / laravel-passport-socialite

Licence: MIT license
The missing social authentication plugin (i.e. SocialGrant) for laravel passport.

Programming Languages

PHP
23972 projects - #3 most used programming language

Projects that are alternatives of or similar to laravel-passport-socialite

hej
Hej! is a simple authentication boilerplate for Socialite.
Stars: ✭ 111 (+122%)
Mutual labels:  socialite, passport
Passport Social Grant
Stars: ✭ 114 (+128%)
Mutual labels:  passport, social-login
Clean-Laravel-Api
⭐️ Build APIs You Won't Hate In Laravel.
Stars: ✭ 85 (+70%)
Mutual labels:  passport, laravel-passport
laravel8-passport-fcm-api
Live streaming gigs mobile app RESTful API endpoints
Stars: ✭ 13 (-74%)
Mutual labels:  socialite, passport
todos-express-password
Todo app using Express and Passport for sign in with username and password.
Stars: ✭ 739 (+1378%)
Mutual labels:  passport
authorize-me
Authorization with social networks
Stars: ✭ 44 (-12%)
Mutual labels:  social-login
monzo-php
PHP Library for use with https://monzo.com
Stars: ✭ 20 (-60%)
Mutual labels:  socialite
auth-quickstart
Authentication Quickstart with Express, Passport and Sequelize
Stars: ✭ 49 (-2%)
Mutual labels:  passport
LeonSocialLogin
Leon Social Login is an Android library written to Integrate (Twitter, Facebook, Google, SnapChat) login.
Stars: ✭ 16 (-68%)
Mutual labels:  social-login
laravel-sso-passport
[DEPRECATED] A simple SSO (Single Sign On) system using the Laravel Framework with Passport API Authentication
Stars: ✭ 27 (-46%)
Mutual labels:  passport
Instagram
[READ ONLY] Subtree split of the SocialiteProviders/Instagram Provider (see SocialiteProviders/Providers)
Stars: ✭ 34 (-32%)
Mutual labels:  socialite
SpringSecuritySocialLoginExample
This application will provider user to login with social login( facebook, linkedin and twitter) and form login as well.
Stars: ✭ 39 (-22%)
Mutual labels:  social-login
laravel-api-boilerplate-passport
An API Boilerplate to create a ready-to-use REST API in seconds.
Stars: ✭ 20 (-60%)
Mutual labels:  passport
express-mongo-jwt-boilerplate
Express Mongo JsonWebToken boilerplate
Stars: ✭ 100 (+100%)
Mutual labels:  passport
peerai-api
Peerism's Peer.ai API built with Truffle, Node.js, Express.js, Solidity, and Ethereum TestRPC
Stars: ✭ 18 (-64%)
Mutual labels:  passport
passport-local-knex
adding passport to a node app
Stars: ✭ 51 (+2%)
Mutual labels:  passport
discord-dashboard
Example of Discord Oauth2 - Complete with Discord Bot
Stars: ✭ 35 (-30%)
Mutual labels:  passport
Weibo
[READ ONLY] Subtree split of the SocialiteProviders/Weibo Provider (see SocialiteProviders/Providers)
Stars: ✭ 37 (-26%)
Mutual labels:  socialite
sociallogin
Joomla!™ login and user account creation with Facebook, Google, GitHub etc social media accounts
Stars: ✭ 27 (-46%)
Mutual labels:  social-login
express-mvp
Express.js project template ready to go
Stars: ✭ 21 (-58%)
Mutual labels:  passport

Laravel Passport Socialite

The missing social authentication plugin (i.e. SocialGrant) for laravel passport.

Description

This package helps integrate social login using laravel's native packages i.e. (passport and socialite). This package allows social login from the providers that is supported in laravel/socialite package.

Getting Started

To get started add the following package to your composer.json file using this command.

composer require schedula/laravel-passport-socialite

Configuration

When composer installs this package successfully, register the Schedula\Laravel\PassportSocialite\PassportSocialiteServiceProvider::class in your config/app.php configuration file.

'providers' => [
    // Other service providers...
    Schedula\Laravel\PassportSocialite\PassportSocialiteServiceProvider::class,
],

Note: You need to configure third party social provider keys and secret strings as mentioned in laravel socialite documentation https://laravel.com/docs/5.6/socialite#configuration

Usage

Step 1 - Setting up the User model

Implement UserSocialAccount on your User model and then add method findForPassportSocialite. findForPassportSocialite should accept two arguments i.e. $provider and $id

$provider - string - will be the social provider i.e. facebook, google, github etc.

$id - string - is the user id as per social provider for example facebook's user id 1234567890

And the function should find the user which is related to that information and return user object or return null if not found

Below is how your User model should look like after above implementations.

namespace App;

use Schedula\Laravel\PassportSocialite\User\UserSocialAccount;
class User extends Authenticatable implements UserSocialAccount {
    
    use HasApiTokens, Notifiable;

    /**
    * Find user using social provider's id
    * 
    * @param string $provider Provider name as requested from oauth e.g. facebook
    * @param string $id User id of social provider
    *
    * @return User
    */
    public static function findForPassportSocialite($provider,$id) {
        $account = SocialAccount::where('provider', $provider)->where('provider_user_id', $id)->first();
        if($account) {
            if($account->user){
                return $account->user;
            }
        }
        return;
    }
}

Note: SocialAccount here is a laravel model where I am saving provider and provider_user_id and local database user id. Below is the example of social_accounts table

id provider provider_user_id user_id created_at updated_at
1 facebook XXXXXXXXXXXXXX 1 XX-XX-XX XX:XX:XX XX-XX-XX XX:XX:XX
2 github XXXXXXXXXXXXXX 2 XX-XX-XX XX:XX:XX XX-XX-XX XX:XX:XX
3 google XXXXXXXXXXXXXX 3 XX-XX-XX XX:XX:XX XX-XX-XX XX:XX:XX

Step 2 - Getting access token using social provider

I recommend you to not to request for access token from social grant directly from your app since the logic / concept of social login is you need to create account if it doesn't exists or else login if exists.

So here in this case we will be making a custom route and a controller that will recieve the Access Token or Authorization Token from your client i.e. Android, iOS etc. application. Here client fetches access token / authorization token from provider

Our route here can be something like this:

Route::post('/auth/social/facebook', 'SocialLogin@loginFacebook');

And here is how we can write our controller and its method for that :

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Route;
class SocialLogin extends Controller {

	public function loginFacebook(Request $request) {
		try {

			$facebook = Socialite::driver('facebook')->userFromToken($request->accessToken);
			if(!$exist = SocialAccount::where('provider',  SocialAccount::SERVICE_FACEBOOK)->where('provider_user_id', $facebook->getId())->first()){
				
				// create user account
			}
			return response()->json($this->issueToken($request, 'facebook', $request->accessToken));
		}
		catch(\Exception $e) {
			return response()->json([ "error" => $e->getMessage() ]);
		}
		
	}
    
	public function issueToken($request, $provider, $accessToken) {
		
		/**
		* Here we will request our app to generate access token 
		* and refresh token for the user using its social identity by providing access token 
		* and provider name of the provider. (I hope its not confusing)
		* and then it goes through social grant and which fetches providers user id then calls 
		* findForPassportSocialite from your user model if it returns User object then it generates 
		* oauth tokens or else will throw error message normally like other oauth requests.
		*/
		$params = [
			'grant_type' => 'social',
			'client_id' => 'your-client-id', // it should be password grant client
			'client_secret' => 'client-secret',
			'accessToken' => $accessToken, // access token from provider
			'provider' => $provider, // i.e. facebook
		];
		$request->request->add($params);
		
		$requestToken = Request::create("oauth/token", "POST");
		$response = Route::dispatch($requestToken);
		
		return json_decode((string) $response->content(), true);
	}
}

Note: SocialGrant will only accept access token not authorization token, for example google provides authorization token in android when requested server auth code i.e. offline access, so you need to exchange auth code for an access token. Refer here: https://github.com/google/google-api-php-client

Note: SocialGrant acts similar to PasswordGrant so make sure you use client id and secret of password grant while making oauth request

That's all folks

Wait you still here?

I am working on this cool project called yoheim. It's an all in one collaboration platform to manage and share ssh servers. Download now and start using it for free www.yoheim.com

yoheim log
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].