Wednesday, July 20, 2016

Laravel 5.2 සිංහලෙන් - Social Authentication using Laravel Socialit - 2

යාලුවනේ මම කලින් පොස්ට් එකේ කියලා දුන්න FB එකෙන් අපේ project එකට log වෙන්නේ කොහොමද කියල. අද බලමු google, Twitter, Google, GitHub සහ Bit bucket ඔක්කොම එක පාර අපේ project එකේ login එකට දාගන්නේ කොහොමද කියලා.
මුලින්ම බලමු අපේ project එකේ config/services.php ට ඕන google credentials  ගන්නේ කොහොමද කියලා. පළමුවෙන් google log වෙලා පහල තියෙන url එකට ගිහිල්ලා new project click කරන්න.

https://console.developers.google.com/ 




ඊට පස්සේ api manager click කරලා එන වින්ඩොව් එකේ sub මෙනු එකේ Credentials වලට යන්න. ඊළගට create credential කියන select මෙනු එකෙන් OAuth client ID select කරලා web application radio button එක click කරන්න. එතකොට පහල තියෙන වගේ window එකක් ඒවි. 





මේකේ Authorized redirect URIs වලට අපේ project එකේ google verification එකෙන් පස්සේ redirect වෙන්න ඕන method එකේ නමත් එක්ක url එක දෙන්න. තව උදාහරණ image එකක් පහල තියෙනවා. 







'facebook' => [
    'client_id' => '163083153370178',
    'client_secret' => '937de466517562b8efghds7a4a7d1f725',
    'redirect' => 'http://localhost/Laravel_socialite/callback/facebook',
    ],

    'google' => [
    'client_id' => '661475dfe4080-bjasbeam7gsvtuf2uf980fcoa76k4ne1.apps.googleusercontent.com',
    'client_secret' => '5bA_3km524HVY-NBhygdFeqh9',
    'redirect' => 'http://localhost/Laravel_socialite/callback/google',
   ],
ඊළගට config/services.php වල උඩ විදියට settings හදන්න.ඊට පස්සේ routes වලට මේ lines එකතු කරන්න ඕන මොකද අපි දැන් providers ල ගොඩක් භාවිතා කරන නිසා.

Route::get('/redirect/{provider}', 'SocialAuthController@redirect');
Route::get('/callback/{provider}', 'SocialAuthController@callback');
 ඊළගට SocialAuthController එකේ redirect method එකයි callback method එක පහල විදියට වෙනස් කරන්න ඕන.
 public function redirect($provider)
    {
        return Socialite::driver($provider)->redirect();    
    }   

    public function callback(SocialAccountService $service, $provider)
    {
        $service->createOrGetUser(Socialite::driver('facebook')->user());
        $user = $service->createOrGetUser(Socialite::driver($provider));
        auth()->login($user);
        return redirect()->to('/home');     
    }
 ඊළගට controller වල තියෙන SocialAccountService.php file එකත් පහල විදියට වෙනස් කර ගන්න
<?php

namespace App\Http\Controllers;

//use Laravel\Socialite\Contracts\User as ProviderUser;
use Laravel\Socialite\Contracts\Provider;

use App\SocialAccount;
use App\User;

class SocialAccountService
{
    public function createOrGetUser(Provider $provider)
    {
        $providerUser = $provider->user();
        $providerName = class_basename($provider); 

        $account = SocialAccount::whereProvider($providerName)
            ->whereProviderUserId($providerUser->getId())
            ->first();

        if ($account) {
            return $account->user;
        } else {

            $account = new SocialAccount([
                'provider_user_id' => $providerUser->getId(),
                'provider' => $providerName
            ]);

            $user = User::whereEmail($providerUser->getEmail())->first();

            if (!$user) {

                $user = User::create([
                    'email' => $providerUser->getEmail(),
                    'name' => $providerUser->getName(),
                ]);
            }

            $account->user()->associate($user);
            $account->save();

            return $user;

        }

    }
}
අන්තිමට login page එකට link දෙක දාන්න

    <a href="redirect/facebook">FB Login</a>
    <a href="redirect/twitter">Twitter Login</a>

දැන් හරි........................................

මේ ලිපිය ප්‍රයෝජනවත් කියලා හිතෙනවනම් මේ ලිපිය Share කරලා යාළුවන්ටත් කියන්න. Comment එකක් දාන්නත් අමතක කරන්න එපා. ජය වේවා..!!







Share/Bookmark

0 comments:

Post a Comment