Laravel Login Melalui Facebook Menggunakan Socialite

Selain facebook, Socialite juga support

  • Facebook
  • Github
  • Google
  • Twitter
  • Bitbucket

INSTALL SOCIALITE

Pertama install socialite

composer require laravel/socialite

atau lagkah alternatif, edit file composer.json, tambah pada require section

"laravel/socialite~2.0"

dan jangan lupa run composer update.

EDIT CONFIG/APP.PHP

Edit config/app.php, tambah code berikut pada bahagian array provider

Laravel\Socialite\SocialiteServiceProvider::class,

Tambah Socialide facade pada bahagian array aliases

'Socialite'=> Laravel\Socialite\Facades\Socialite::class,

CREATE FACEBOOK APP

Daftar app baru di https://developers.facebook.com.

Dapatkan

  • API ID
  • API SECRET

EDIT CONFIG/SERVICE.PHP

Tambah code berikut

'facebook' => [
'client_id' =>'yourFacebookAppID',
'client_secret' =>'yourFacebookAppSecret',
'redirect' =>'http://yourLaravelAppURL/login/facebook/callback',
],

EDIT FAIL .ENV

'facebook' =[
'client_id' =>env('FACEBOOK_ID'),
'client_secret' =>env('FACEBOOK_SECRET'),
'redirect' =>env('FACEBOOK_URL'),
],

CREATE/UPDATE TABLE USER

Untuk create table biasanya akan guna migration.

Biasanya untuk fresh installation dah ada migration create_users_table.

Cuma kena update sikit utk masukkan facebook unique id.

Edit database/migrations/timestamps_create_users_table.php

public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('facebook_id')->unique();
$table->string('name');
$table->string('email')->unique();
$table->string('password', 60);
$table->rememberToken();
$table->timestamps();
});
}

Untuk create table run command berikut

php artisan migrate

Kalau table user korang dah exist lain citer.

Kena create migration update_user_table.

Run command berikut, utk hasilkan migration table

php artisan make:migration update_users_table

edit database/migrations/timestamps_update_users_table.php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class UpdateUsersTable extends Migration
{
8 public function up(){
if(Schema::hasColumn('users', 'facebook_id')) {

} else {
Schema::table('users', function ($table) {
$table->string('facebook_id')->unique();
});
}
}

public function down()
{
Schema::table('users', function ($table) {
$table->dropColumn('facebook_id');
});
}
}

UPDATE APP/USER.PHP

protected $fillable = [
'name', 'email', 'password', 'facebook_id',
];

UPDATE ROUTE

Route::get('login/facebook', 'Auth\AuthController@redirectToFacebook');
Route::get('login/facebook/callback', 'Auth\AuthController@getFacebookCallback');

Route ini akan membawa (redirectToFacebook) kita ke facebook untuk login, dan kembali(getFacebookCallback) ke page pada host kita.

EDIT Auth/AuthController

Tambah method

  • redirectToFacebook()
  • getFacebookCallback()
public function redirectToFacebook()
{
return Socialite::with('facebook')->redirect();
}

public function getFacebookCallback()
{

$data = Socialite::with('facebook')->user();
$user = User::where('email', $data->email)->first();

if(!is_null($user)) {
Auth::login($user);
$user->name = $data->user['first_name'].' '.$data->user['last_name'];
$user->facebook_id = $data->id;
$user->save();
} else {
$user = User::where('facebook_id', $data->id)->first();
if(is_null($user)){
// Create a new user
$user = new User();
//$user->name = $data->user['first_name'].' '.$data->user['last_name'];
$user->name = $data->user['name'];
$user->facebook_id = $data->id;
$user->email = $data->email;
$user->save();
}

Auth::login($user);

}

return redirect('/')->with('success', 'Successfully logged in!');
}

Disebabkan class ini menggunakan Socialite dan Auth, sila tambah di atas class AuthController.

use Socialite;
use Auth;

VISIT

Cuba visit http://cookbook.app/login/facebook

Kita akan dibawa ke page login FB, jika tiada masalah kita akan diredirect ke web kita semula.

EDIT HOMEPAGE VIEW

@extends('master')
@section('title', 'Home')

@section('content')
<div class="container">
<div class="content">
	@if(!Auth::check())
	<div class="quote">Our Home page!</div>
	@else
	<div class="quote">You are now logged in!</div>
	@endif</div>
</div>
@endsection

Fungsi Auth::check() adalah untuk semak sama ada kita mempunyai access di Facebook atau tidak.

Edit Route.php

Untuk menggunakan Session dalam Laravel 5.2 perlu letakkan route dalam group web middleware seperti berikut

<?php

/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| Here is where you can register all of the routes for an application.
| It's a breeze. Simply tell Laravel the URIs it should respond to
| and give it the controller to call when that URI is requested.
|
*/

//Route::get('/', function () {return view('home');


Route::group(['middleware' => ['web']], function () {

Route::get('/','PagesController@home');
Route::get('/about','PagesController@about');
Route::get('/contact','PagesController@contact');
Route::get('/test','PagesController@test');

	
Route::get('login/facebook', 'Auth\AuthController@redirectToFacebook');
Route::get('login/facebook/callback', 'Auth\AuthController@getFacebookCallback');

});