Laravel Socialite總集

安裝socialite包

composer require laravel/socialite

修改config/app.php

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

'aliases' => [
    //...
  'Socialite' => Laravel\Socialite\Facades\Socialite::class,
]

數(shù)據(jù)庫

  1. 修改database/migrations/create_users_table.php乃正,或者添加新的migration進(jìn)行修改
    $table->string('email')->unique()->nullable();

2.執(zhí)行php artisan make:model SocialAccount -m生成Model和migrations
修改create_social_accounts_table:

Schema::create('social_accounts', function (Blueprint $table) {
    $table->integer('user_id');
    $table->string('provider_user_id');
    $table->string('provider');
    $table->timestamps();
});

修改SocialAccount類

namespace App;

use Illuminate\Database\Eloquent\Model;

class SocialAccount extends Model
{
    protected $fillable = ['user_id', 'provider_user_id', 'provider'];

    public function user()
    {
        return $this->belongsTo(User::class);
    }
}

運(yùn)行php artisan migrate

創(chuàng)建登陸Controller

php artisan make:controller SocialAuthController

<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use Laravel\Socialite\Contracts\User as ProviderUser;
use Socialite;

class SocialAuthController extends Controller
{
    public function redirect($provider)
    {
        return Socialite::driver($provider)->redirect();   
    }   

    public function callback($provider)
    {
       $user = $this->createOrGetUser(Socialite::driver($provider)->user(), $provider);
       Auth::login($user);
       return redirect()->to('/home'); 
    }

    private function createOrGetUser(ProviderUser $providerUser, $provider)
    {
      $account = SocialAccount::whereProvider($provider)
        ->whereProviderUserId($providerUser->getId())
        ->first();
      if ($account) {
        return $account->user;
      } else {
        $account = new SocialAccount([
          'provider_user_id' => $providerUser->getId(),
          'provider' => $provider
        ]);
        $email = $providerUser->getEmail();
        if ($email) {
          $user = User::whereEmail($providerUser->getEmail())->first();
          if (!$user) {
            $user = User::create([
              'email' => $providerUser->getEmail(),
              'name' => $providerUser->getName(),
              'password' => bcrypt('123456')
            ]);
          }
      } else {
        $user = User::create([
          'name' => $providerUser->getName(),
          'password' => bcrypt('123456')
        ]);
      }
      $account->user()->associate($user);
      $account->save();
      return $user;
    }
  }
}

路由

route.php(<=5.2) 或者web.php(5.3) 中加入

Route::get('/{provider}/redirect', 'SocialAuthController@redirect')->name('redirect');
Route::get('/{provider}/callback', 'SocialAuthController@callback')->name('callback');

至此巩割,準(zhǔn)備工作都完成了走趋,接下來進(jìn)行各個(gè)平臺(tái)的oauth開發(fā)

第三方平臺(tái)

Facebook Login

打開Facebook開發(fā)者頁面(https://developers.facebook.com/)

facebook-for-devs.png

創(chuàng)建一個(gè)Website應(yīng)用


new-app.png

輸入應(yīng)用名和類型沃呢,接著跳過Quick Start步驟。


app-name.png

點(diǎn)擊進(jìn)入應(yīng)用設(shè)置頁面君珠,添加website平臺(tái)囚企,并加入本地服務(wù)器用于測試


site-url.png

從該頁面取得client_id和client_secret吗讶,打開config/services.php,添加:

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

在生產(chǎn)環(huán)節(jié)中曹抬,必須使用env()函數(shù)來獲取client_id和client_secret

resources/views/auth/login.blade.php中加入代碼:

<a href="route('redirect', 'facebook')">Facebook</a>

在windows環(huán)境下有可能會(huì)遇到**Error: [cURL error 60: SSL certificate in Laravel 5 while Facebook authentication] **
可以下載 cacert.pemhttps://gist.github.com/VersatilityWerks/5719158/download溉瓶,然后解壓拿到cacert.pem
放到任意位置,然后修改文件php.inicurl.cainfo = "path_to_cert\cacert.pem", 這里path_to_cert就是放置cacert.pem的路徑

這樣使用Facebook應(yīng)該就沒什么問題了谤民。

Github

Github的比較簡單堰酿,登陸github,打開Settings->Developer settings->OAuth applications张足,

github_apps.png

然后創(chuàng)建新應(yīng)用即可


github_keys.png

然后回到Laravel触创,只需在
config/services.php中添加:

'github' => [
    'client_id' => '690344774435367',
    'client_secret' => 'ebc50d3fd1d2f7286e02d247e5751ef4',
    'redirect' => 'http://localhost:8000/github/callback',
],

resources/views/auth/login.blade.php中加入代碼:

<a href="route('redirect', 'github')">Github</a>

完成!

Google

登陸Google開發(fā)者为牍,進(jìn)入Google API Console[https://console.developers.google.com/apis/library]哼绑,

google_api.png

創(chuàng)建憑據(jù):


google_keys.png

用于本地測試需要額外的步驟:
1.登陸(https://admin.google.com/) [Google Admin console]
2.點(diǎn)擊Applications > Others Google services > Google+ > avance settings.
3.激活A(yù)PI Google+

然后回來Laravel
config/services.php中添加:

'google' => [
    'client_id' => '763269637355-dj6d21427p78r17l4f263lq84p23as4q.apps.googleusercontent.com',
    'client_secret' => 'ebc50d3fd1d2f7286e02d247e575xxxx',
    'redirect' => 'http://localhost:8000/google/callback',
],

resources/views/auth/login.blade.php中加入代碼:

<a href="route('redirect', 'google')">Google</a>

完成

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市碉咆,隨后出現(xiàn)的幾起案子凌那,更是在濱河造成了極大的恐慌,老刑警劉巖吟逝,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件帽蝶,死亡現(xiàn)場離奇詭異,居然都是意外死亡块攒,警方通過查閱死者的電腦和手機(jī)励稳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來囱井,“玉大人驹尼,你說我怎么就攤上這事∨优唬” “怎么了新翎?”我有些...
    開封第一講書人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長住练。 經(jīng)常有香客問我地啰,道長,這世上最難降的妖魔是什么讲逛? 我笑而不...
    開封第一講書人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任亏吝,我火速辦了婚禮,結(jié)果婚禮上盏混,老公的妹妹穿的比我還像新娘蔚鸥。我一直安慰自己惜论,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開白布止喷。 她就那樣靜靜地躺著馆类,像睡著了一般。 火紅的嫁衣襯著肌膚如雪弹谁。 梳的紋絲不亂的頭發(fā)上蹦掐,一...
    開封第一講書人閱讀 50,084評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音僵闯,去河邊找鬼卧抗。 笑死,一個(gè)胖子當(dāng)著我的面吹牛鳖粟,可吹牛的內(nèi)容都是我干的社裆。 我是一名探鬼主播,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼向图,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼泳秀!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起榄攀,我...
    開封第一講書人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤嗜傅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后檩赢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吕嘀,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年贞瞒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了偶房。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡军浆,死狀恐怖棕洋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情乒融,我是刑警寧澤掰盘,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布半等,位于F島的核電站箱锐,受9級(jí)特大地震影響柠逞,放射性物質(zhì)發(fā)生泄漏蝙场。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一谒出、第九天 我趴在偏房一處隱蔽的房頂上張望娩鹉。 院中可真熱鬧,春花似錦典蜕、人聲如沸断盛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽钢猛。三九已至,卻和暖如春轩缤,著一層夾襖步出監(jiān)牢的瞬間命迈,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來泰國打工火的, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留壶愤,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓馏鹤,卻偏偏與公主長得像征椒,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子湃累,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • 原文鏈接 必備品 文檔:Documentation API:API Reference 視頻:Laracasts ...
    layjoy閱讀 8,605評(píng)論 0 121
  • 必備品文檔:DocumentationAPI: API Reference視頻:Laracasts速查表:Lara...
    ethanzhang閱讀 5,739評(píng)論 0 68
  • 校園失物招領(lǐng)平臺(tái)開發(fā) ——基于laravel框架構(gòu)建最小內(nèi)容管理系統(tǒng) 摘要 ? 針對(duì)目前大學(xué)校園人口密度大勃救、人群活...
    藍(lán)蓮花xzsky閱讀 6,178評(píng)論 8 54
  • 如果有一天蒙秒,我變壞了。 請(qǐng)記得 宵统,我曾經(jīng)善良過… 如果有一天晕讲,我變冷漠了。 請(qǐng)記得 马澈,我曾經(jīng)也被冷漠過… 如果有一...
    揺弋的心閱讀 743評(píng)論 0 0
  • 我一直是想有快樂幸福的生活益兄,但是,我過去一直沒有找到箭券,直到最近净捅,我才發(fā)現(xiàn),幸福一直都在我的身邊辩块,只是我斷斷續(xù)續(xù)的和...
    許敏雅蘭閱讀 834評(píng)論 0 0