Blog

Identifikim me Facebook ne Laravel

May 09 2018

Identifikim me Facebook ne Laravel
Shumë nga faqet në të cilat duhet të regjistrosh një llogari, të japin mundësin që ta kryejsh këtë nëpërmjet profilit që keni në rrjetet sociale. Ne do të mësojmë si të përdorim facebook llogarin për regjistrim dhe si ta ruajm atë në databazën tonë, duke përdorur librarinë socialite në Laravel.
Pasi të kemi krijuar një projekt Laravel të pastër, do të vazhdojmë me procesin e autentikmit, laravel ka krijuar gjithçka për këtë proces ne thjesht duhet të thirrim komandën në terminal :

php artisan make:auth

Kështu kemi krijuar regjistrimin dhe identifikimin për anëtarët e faqes, ne do ta zgjerojmë këtë funksionalitet duke i shtuar dhe identifikimin me facebook llogari.

Hapi 1

Fillimisht për të implementuar librarinë që na mundëson identifikimin nëpërmjet rrjeteve sociale ekzekutojme komandën :

composer require laravel/socialite
Tani që socialite u instalua bëjmë ndryshime në projekt në config/app.php

'providers' => [
    // Other service providers...
    Laravel\Socialite\SocialiteServiceProvider::class,
],

Gjithashtu edhe në vargun alias e shtojmë kodin e mëposhtëm :

// social liste alias
'Socialite' => Laravel\Socialite\Facades\Socialite::class,

Hapi 2
Tani që e implementuam në projekt librarinë socialite, na duhet të këmi aktiv një app si facebook developer. 
Krijojmë një app të ri në facebook dhe nga Dashboard zgjedhim produktin Facebook Login që i tregojmë facebook se këtë app do ta përdorim për identifikim në faqen tonë.



Kur të kemi zgjedhur facebook login app-i jonë do të na jap kredencialet që duhet të përdorim për tu lidhur me app-in nga faqja jonë :

App ID: xxxxxxxxx
App Secret: xxxxxxx

Shkojmë në config/service.php dhe kryejm disa ndryshime si mëposht:

// services.php
'facebook' => [
    'client_id' => 'xxxxxxx',
    'client_secret' => 'xxxxxxxx',
    'redirect' => '',
],

Tek Client_id vendosim App ID dhe client_secret vendosim App Secret.
Gjatë identifikimit me facebook mund të na shfaqen gabime, një prej gabimeve të mundshme mund të jetë mos definimi i domainit :

Can’t load URL: The domain of this URL is not included in the app’s domains. To be able to load this URL, add all domains and sub-domains of your app to the App Domains field in your app settings.

Vendoseni domainin tuaj si në fotografinë më posht.


Hapi 3
Do të na duhet të krijojmë një controller që do merret me menaxhimin e Autenitikimit nëpërmjet Facebook.

php artisan makeËcontroller SocialAuthFacebookController

Në kontroller do të na duhen të implementojmë dy funksione 
Redirect() që do ti redirektoj përdoruesit në Facebook
Callback() që do të menaxhoj përgjigjen e Facebook

<?php
// SocialAuthFacebookController.php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Socialite;
class SocialAuthFacebookController extends Controller
{
    public function redirect(){
        return Socialite::driver('facebook')->redirect();
    }
    public function callback(){
       
    }
}

routes>>web.php do ti konfigurojmë rutet që i përgjigjen funksioneve të krijuara më sipër

Route::get('/redirect', 'SocialAuthFacebookController@redirect');
Route::get('/callback', 'SocialAuthFacebookController@callback');

Tani që definuam rutet dhe aplikacioni jonë është aktiv në localhost në service.php ndryshojmë redirect linkun e facebook që ti përgjigjet aplikacionit tonë :

'facebook' => [
    'client_id' => 'xxxxxxx',
    'client_secret' => 'xxxxxxx',
    'redirect' => 'http://localhost:8000/callback',
],

Në blade tamplate që do të shfaqet për vizitorët na duhet vetëm ta shfaqim si link që do të thirr redirect() funksionin :

<a href="{{url('/redirect')}}">Login with Facebook</a>

Pasi përdoruesi të tentoj të regjistrohet me facebook, faqja do të na kthej në callback() funksionin dhe deri tani ne do të shohim vetëm codin që vin si përgjigje prej facebook, për ta ruajtur këtë përgjigje në databazën tone fillimisht na duhet një Model nëpërmjet të cilit do ti kryejm këto veprime, le të krijojmë një model dhe migration që të krijojmë tabelën në databazë.

php artisan make:model SocialFacebookAccount –m

-m përodret për të krijuar migration për modelin e parashtruar

database/migrations/create_social_facebook_accounts_table.php duhet të duket si mëposhtë.

<?php
// create_social_facebook_accounts.php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateSocialFacebookAccountsTable extends Migration
{
    public function up()
    {
        Schema::create('social_facebook_accounts', function (Blueprint $table) {
          $table->integer('user_id');
          $table->string('provider_user_id');
          $table->string('provider');
          $table->timestamps();
        });
    }
    public function down()
    {
        Schema::dropIfExists('social_facebook_accounts');
    }
}

Në terminal ekzekutojmë 

php artisan migrate 

Që tabela të shtohet në databazë.
Në modelin e krijuar definojmë kolonat që janë të ndryshueshme dhe gjithashtu funksionin user që do ta kryej lidhjen nëpërmjet Llogaris së Facebook dhe Llogaris në aplikacion.

protected $fillable = ['user_id', 'provider_user_id', 'provider'];
public function user(){
      return $this->belongsTo(User::class);
}

Hapi 4
Pasi krijojmë modelin dhe tabelën ku do ruhen të dhënat do na duhet të krijojmë servisin që do të bëjë kontrollin nëse përdoruesi është regjistruar më parë apo është një prodorues i ri që duhet të regjistrohet.
app krijojmë në folder të ri Services  dhe brenda atij folderi krijojmë SocialFacebookAccountService.php 

<?php
namespace App\Services;
use App\SocialFacebookAccount;
use App\User;
use Laravel\Socialite\Contracts\User as ProviderUser;
class SocialFacebookAccountService{
    public function createOrGetUser(ProviderUser $providerUser){
        $account = SocialFacebookAccount::whereProvider('facebook')
            ->whereProviderUserId($providerUser->getId())
            ->first();
        if ($account) {
            return $account->user;
        } else {
            $account = new SocialFacebookAccount([
                'provider_user_id' => $providerUser->getId(),
                'provider' => 'facebook'
            ]);
            $user = User::whereEmail($providerUser->getEmail())->first();
            if (!$user) {
                $user = User::create([
                    'email' => $providerUser->getEmail(),
                    'name' => $providerUser->getName(),
                    'password' => md5(rand(1,10000)),
                ]);
            }
            $account->user()->associate($user);
            $account->save();
            return $user;
        }
    }
}

Servisi i krijuar duhet të thirret në funksionin callback() që të jetë funksional kur të kthehet përjgigjja nga Facebook.
Fillimisht në kontroller thirrim servisin e krijuar 

use App\Services\SocialFacebookAccountService;

dhe më pas callback() funksioni do të duket si mëposht.

public function callback(SocialFacebookAccountService $service){
        $user = $service->createOrGetUser(Socialite::driver('facebook')->user());
        auth()->login($user);
        return redirect()->to('/home');
}

Tani mund të testoni aplikacionin tuaj.

Hapi 5 – Final
Deri këtu aplikacioni juaj është i përfunduar por nuk është gati të kaloj aktiv për të gjithë, ajo çfar duhet të bëni është të shkoni në App-in tuaj në Facebook dhe 

Settings -> Basic -> Contact Email. (vendoseni email adresën tuaj)

Dhe tek App Review klikoni change  dhe 

Do you want to make this app and all its live features available to the general public?  
Bëjeni Yes

Tani aplikacioni juaj do të jetë gati dhe i aksesueshëm nga të gjithë përdoruesit.


  • Enter your Name & E-Mail

  • Discuss with our team

  • Receive a good support