Laravel official pacakge - fantasy0107/notes GitHub Wiki

Socialite - 第三方登入

安裝

//Laravel - official package - Socialite
composer require laravel/socialite

設定 config/app.php

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

controller

namespace App\Http\Controllers\Auth;

use Socialite;

class LoginController extends Controller
{
    //轉址到google登入頁面
    public function redirectToProvider()
    {
        return Socialite::driver('google')->stateless()->redirect();
    }

    //處理完後所回傳的頁面
    public function handleProviderCallback()
    {
        dd(Socialite::driver('google')->stateless()->user());
    }
}

Route

//routes/api.php
Route::get('login/google', 'api\LoginController@redirectToProvider');
Route::get('login/google/callback', 'api\LoginController@handleProviderCallback');

設定 config/services.php

//config/services.php
'google' => [
    'client_id' => 'your-google-app-id',
    'client_secret' => 'your-goole-app-secret',
    'redirect' => 'http://your-callback-url',
],

也可以設定在env底下

取得 'client_id' 和 'client_secret'

Google

Google cloud platform

  1. 點擊最上方功能列google cloud platform右邊的專案
  2. 點選+號新增專案
  3. 填寫相關資料
  4. 點擊最上方功能列google cloud platform左邊的產品與服務
  5. 選擇API和服務
  6. 憑證
  7. 建立憑證
  8. 選擇OAuth用戶端ID
  9. 填寫相關資料
  10. 取得 client_id 和 client_secret
  11. config/services.php填入 client_id 和 client_secret

Facebook

  1. facebook developer apps管理
  2. 新增應用程式
  3. 應用程式編號就是 client_id而應用程式密鑰是client_secret
  4. 新增產品
  5. Facebook 登入
  6. 點選 Facebook 登入
  7. 設定
  8. 輸入有效的OAuth重新導向URI 感謝大大
  9. Done

可能會碰到的問題

socialite - 使用 access token

如果已經有token可以用下面方法

$token = 'your_token';

$user = Socialite::driver('github')->userFromToken($token);
1. cURL error 60: SSL certificate: unable to get local issuer certificate

參考答案

//php.ini
;;;;;;;;;;;;;;;;;;;;
; php.ini Options  ;
;;;;;;;;;;;;;;;;;;;;

curl.cainfo = "C:\AppServ\Apache24\conf\ssl\cacert.pem"
  • restart apache
2. Laravel Socialite Access Not Configured. Google+ API (truncated...) exception 'GuzzleHttp\Exception

如何取得Token

如果是直接使用token方式進行登入的時候, 像是下面的code就必需要跟第三方拿token, 以下列出Facebook和google拿token的方式

try {
    $socialiteUser = Socialite::driver($socialiteType)->userFromToken($request->input($socialiteType.'_token'));
} catch(\Exception $e) {
    abort(403, 'Forbidden');
}

Facebook

  • 先到圖形API測試工具
  • 應用程式選擇 APP
  • 取得權杖
  • 選取這個token有甚麼樣的存取權限
  • 取得存取權杖
  • 會產生一串亂碼那就是token(某個APP可以存取你的資訊)

參考這篇

google

  • 直接用socialite
  • google console
  • 左上api和服務
  • 憑證
  • OAuth 2.0 用戶端ID 選擇相關的APP
  • 設定已授權的重新導向URI
  • Laravel 底下設定相關的Client ID, Secret, Redirect_uri
  • Route用get然後用上面controller標題的寫法