Cara menggunakan api login php github

Socialite adalah library laravel yang berfungsi dalam membantu proses OAuth login dengan social media yang tersedia seperti, Facebook, Twitter, Github, Linkedin, Google, dan Bitbucket.

Oke sekarang kita buat file baru ya, mari kita mulai.

Bagi yang udah tau cara buat project laravel, ya silahkan buat, bagi yang belum langsung kesini aja

Pertama buat database dulu, terserah lah namanya apa.

Kedua setting database lo di .ENV namanya apa sama user dan password.

Pergi ke databases -> migration -> create_users_table dan edit si migration kaya gini

Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->nullable();
$table->string('password', 60)->nullable();
$table->string('provider');
$table->string('provider_id');
$table->rememberToken();
$table->timestamps();
});

Kita menambahkan provider untuk menyimpan data dia login atau register dari mana, dan id nya berapa.

Sekarang jangan lupa langsung migrate aja karena kita lagi belajar.

php artisan migrate

Oke kalo udah langsung mulai dengan ngedownload library nya terlebih dahulu.

composer require laravel/socialite

Oke pada kali ini gue bakalan ngajarin loginnya lewat facebook, twitter sama google aja ya karena ini yang paling sering, sisanya sama kok.

Kalo udah sekarang nyalain Auth dari Laravel. Masukkan code dibawah

php artisan make:auth 

Pergi ke App\Controllers\Auth dan cek apakah ada AuthController.php disana? kalo ada tinggal masukkin kode dibawah, kalo engga ada ya buat baru aja dulu. Setelah itu paste kode dibawah

<?php

namespace App\Http\Controllers\Auth;

use App\User;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use Laravel\Socialite\Facades\Socialite;

class AuthController extends Controller
{

public function redirectToProvider($provider)
{
return Socialite::driver($provider)->redirect();
}

/**
* Obtain the user information from provider. Check if the user already exists in our
* database by looking up their provider_id in the database.
* If the user exists, log them in. Otherwise, create a new user then log them in. After that
* redirect them to the authenticated users homepage.
*
* @return Response
*/
public function handleProviderCallback($provider)
{
$user = Socialite::driver($provider)->user();
$authUser = $this->findOrCreateUser($user, $provider);
Auth::login($authUser, true);
return redirect('/');
}

/**
* If a user has registered before using social auth, return the user
* else, create a new user object.
* @param $user Socialite user object
* @param $provider Social auth provider
* @return User
*/
public function findOrCreateUser($user, $provider)
{
$authUser = User::where('provider_id', $user->id)->first();
if ($authUser) {
return $authUser;
}
else{
$data = User::create([
'name' => $user->name,
'email' => !empty($user->email)? $user->email : '' ,
'provider' => $provider,
'provider_id' => $user->id
]);
return $data;
}
}
}

Sekarang pergi ke routes- > web.php dan tambahkan kode dibawah yang tidak ada.

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

Auth::routes();

Route::get('/home', 'HomeController@index')->name('home');
Route::get('auth/{provider}', 'Auth\AuthController@redirectToProvider');
Route::get('auth/{provider}/callback', 'Auth\AuthController@handleProviderCallback');

{provider} akan diisi dengan facebook/twitter/google pada code dibawah nanti.

Sekarang pergi ke views -> auth -> login.blade.php dan edit aja kaya gini

@extends('layouts.app')

@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">{{ __('Login') }}</div>

<div class="card-body">
<form method="POST" action="{{ route('login') }}">
@csrf

<div class="form-group row">
<label for="email" class="col-sm-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>

<div class="col-md-6">
<input id="email" type="email" class="form-control{{ $errors->has('email') ? ' is-invalid' : '' }}" name="email" value="{{ old('email') }}" required autofocus>

@if ($errors->has('email'))
<span class="invalid-feedback">
<strong>{{ $errors->first('email') }}</strong>
</span>
@endif
</div>
</div>

<div class="form-group row">
<label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label>

<div class="col-md-6">
<input id="password" type="password" class="form-control{{ $errors->has('password') ? ' is-invalid' : '' }}" name="password" required>

@if ($errors->has('password'))
<span class="invalid-feedback">
<strong>{{ $errors->first('password') }}</strong>
</span>
@endif
</div>
</div>

<div class="form-group row">
<div class="col-md-6 offset-md-4">
<div class="checkbox">
<label>
<input type="checkbox" name="remember" {{ old('remember') ? 'checked' : '' }}> {{ __('Remember Me') }}
</label>
</div>
</div>
</div>

<div class="form-group row mb-0">
<div class="col-md-8 offset-md-4">
<button type="submit" class="btn btn-primary">
{{ __('Login') }}
</button>

<a class="btn btn-link" href="{{ route('password.request') }}">
{{ __('Forgot Your Password?') }}
</a>
</div>
</div>

<div class="form-group row">
<div class="col-md-6 offset-md-4">
<a href="{{ url('/auth/google') }}" class="btn btn-github"><i class="fa fa-github"></i> Google</a>
<a href="{{ url('/auth/twitter') }}" class="btn btn-twitter"><i class="fa fa-twitter"></i> Twitter</a>
<a href="{{ url('/auth/facebook') }}" class="btn btn-facebook"><i class="fa fa-facebook"></i> Facebook</a>
</div>
</div>
</form>
<div class="form-group row mb-0">
<div class="col-md-8 col-md-offset-4">

</div>
</div>
</div>
</div>
</div>
</div>
</div>
@endsection

Silahkan buka folder config -> services.php dan tambahkan kode dibawah ini.

<?php

return [

/*
|--------------------------------------------------------------------------
| Third Party Services
|--------------------------------------------------------------------------
|
| This file is for storing the credentials for third party services such
| as Stripe, Mailgun, SparkPost and others. This file provides a sane
| default location for this type of information, allowing packages
| to have a conventional place to find your various credentials.
|
*/

'mailgun' => [
'domain' => env('MAILGUN_DOMAIN'),
'secret' => env('MAILGUN_SECRET'),
],

'ses' => [
'key' => env('SES_KEY'),
'secret' => env('SES_SECRET'),
'region' => 'us-east-1',
],

'sparkpost' => [
'secret' => env('SPARKPOST_SECRET'),
],

'stripe' => [
'model' => App\User::class,
'key' => env('STRIPE_KEY'),
'secret' => env('STRIPE_SECRET'),
],

/* Social Media */
'facebook' => [
'client_id' => env('FB_ID'),
'client_secret' => env('FB_SECRET'),
'redirect' => env('FB_URL'),
],

'twitter' => [
'client_id' => env('TWITTER_ID'),
'client_secret' => env('TWITTER_SECRET'),
'redirect' => env('TWITTER_URL'),
],

'google' => [
'client_id' => env('GOOGLE_ID'),
'client_secret' => env('GOOGLE_SECRET'),
'redirect' => env('GOOGLE_URL'),
],

];

Kalo udah sekarang edit file .ENV kamu, tambahkan kode dibawah ini

TWITTER_ID=
TWITTER_SECRET=
TWITTER_URL=

FB_ID=
FB_SECRET=
FB_URL=

GOOGLE_ID=
GOOGLE_SECRET=
GOOGLE_URL=

Oke gue jelasin sedikit dulu, jadi kita akan ngebuat aplikasi OAuth dengan ketiga social media tersebut, kita perlu daftar di masing-masing social media untuk dapetin key tersebut, dan caranya adalah dengan memasukkan ID, SECRET KEY, dan URL CALLBACK dari aplikasi yang kita buat di socmed tersebut.

Oke mungkin ID sama SECRET KEY kalian paham, tapi mungkin aja ada yang nanya URL CALLBACK itu apasih?

URL CALLBACK adalah URL yang dikunjungi ketika si sosial media nangkep request dari website yang elu buat. Biasanya si URL Callback ini akan nyesuain sama secret key sama id yang udah dibuat.

oke pertama Facebook dulu, yuk sama-sama cabut ke Developer Facebook dan buat aplikasi baru.

Oke silahkan buat aplikasi baru.

nanti akan ada popup nama tampilan dan email kalian, isi aja dengan nama tampilan belajar-login-socialite

Kalo gue namanya Nyoba login, sekarang pilih masuk produk masuk facebook untuk make API Login Facebook. Klik siapkan.

Kalo muncul gini di skip aja dulu, langsung pindah kebawah

Klik pengaturan -> dasar (Settings -> general kalo lo berbahasa inggris, entah kenapa pengaturan gue b.indo).

ID aplikasi adalah FB_ID di .env kita dan Kunci Rahasia Aplikasi adalah FB_SECRET di .env kita.

Copy masing-masing dan tambahkan ke .env

FB_ID=250525818839772
FB_SECRET=d878cc9ba3c60360a742cc33672c3315
FB_URL=https://localhost:8000/auth/facebook/callback

Jangan lupa harus https:// ya karena facebook maksa kita buat https

Sekarang pergi ke produk login by facebook, dan ke settings.

Nah di URI pengalihan OAuth valid tambahin tuh

https://localhost:8000/auth/facebook/callback

kenapa gitu? karena facebook maksa minta https://

Sekarang jalanin laravelnya dan akses ke localhost:8000/login

Bagi yang pake firefox atau google chrome pasti ditanya kaya gini, tenang aja, ini tetep an kok, ini kan di server sendiri. Kenapa punya gue socialite.c2.com ? karena gue pake server Homestead, atau yang biasa pake LARAGON pasti sering ngubah nama projectnya jadi namaproject.dev ini akan gue jelaskan di tutorial yang akan datang.

Cukup klik advanced dan add exception aja, tidak ada alasan untuk tidak masuk, kan servernya di localhost, ngapain takut datanya kecuri? hehehe.

Pilih home dan liat hasilnya.

Facebook berhasil? Sekarang tinggal tahap selanjutnya, TWITTER !

Masuk sini untuk lari ke apps twitter

Ini tampilannya, sekarang kita CREATE NEW APP.

nah sok diikutin aja coba. Disini bedanya adalah twitter gabutuh HTTPS. Intinya twitter ga maksa kita buat pake HTTPS.

Yup we’re finished for create the app.

Pergi ke keys and access tokens, dan kamu bisa melihat Consumer Key yang akan digunakan sebagai TWITTER_ID dan Consumer Secret sebagai TWITTER_SECRET

Sekarang ganti Consumer Key dan Consumer Secret kamu di .env

php artisan migrate
0

Twitter gabutuh HTTPS kok jadi http aja gapapa.

Sekarang coba deh login lewat twitter.

Oke twitter kelar. Twitter paling gampang loh FYI ahahaha.

INFO TERBARU:

Terhitung Maret 2019, Google menutup API Google+ (https://developers.google.com/+/api-shutdown) yang membuat kita harus sign in Google dengan metode Javascript di web (https://developers.google.com/identity/sign-in/web/). Sehingga Login Socialite sudah tidak dapat menggunakan Google lagi dan tutorial login dengan Google telah saya hapus. Saya akan menuliskan cara login dengan Google Sign In Websites (Javascript & Laravel) di tutorial selanjutnya (setelah senggang hehehe) !

— Depok, 8 Maret 2019

Untuk github, linkedin, bitbucket silahkan nyoba sendiri aja ya wkwkwk prosesnya sama kok!

Oke segitu aja ya yang bisa gue jelasin, kalo ada yang error bisa komen dimari siapa tau gue bisa bantu.