2016-01-11 61 views
4

我想知道是否可以擴展內置身份驗證以使用外部API對用戶進行身份驗證?我是Laravel的新手,所以我會很感激你的幫助。 我在Laravel 5.2中爲我的客戶端定製了一個應用程序,但我不直接訪問他們的數據庫服務器,我只能調用他們的API來獲取用戶的詳細信息。Laravel 5通過外部API對用戶進行身份驗證

謝謝。

+0

過去,我構建了一個自定義身份驗證驅動程序和用戶模型,它將用戶存儲在會話中,而不是鏈接到數據庫。這意味着用戶不能互相交互,並且只要會話中斷,該用戶「不存在」,但是在應用程序本身不需要存儲任何有狀態數據的情況下,它已經足夠用了。 – samlev

+0

外部API本身是否有任何認證機制(OA OAuth)? –

+0

我的API仍然沒有完整的文檔,但OAuth無法確定。我相信我需要通過JSON調用來驗證用戶身份。 @samlev你有一些代碼示例可以幫助找出解決方案嗎? – Kasta

回答

1

如果我理解正確,你想記錄用戶從Facebook,Twitter或GitHub的API例如?如果是這樣,你需要使用一個名爲社會名流一個laravel包,這裏是下載和使用它的鏈接: https://github.com/laravel/socialite

你的命令運行這個命令:

composer require laravel/socialite 

接下來,你需要告訴laravel你想用這個包,所以你需要添加這個在配置/ app.php:

'providers' => [ 
// Other service providers... 

Laravel\Socialite\SocialiteServiceProvider::class, 
], 

,這是別名:

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

基本上,您需要在開發者網站上創建一個應用程序,我將爲此示例帶上facebook。您需要訪問此網站: https://developers.facebook.com/,創建一個帳戶,您將獲得您的應用程序url和密鑰。您將在.env和config/services文件中使用它。

在你的config/services文件條紋後補充一點:

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

而在你.ENV文件:

FACEBOOK_ID=*your facebook id* 
FACEBOOK_SECRET=*your facebook secret* 
FACEBOOK_URL=http://yourwebsite.com/callback 

接下來,您將需要一個控制器來處理身份驗證過程中,創建像SocialAuthController並把它放在:

public function redirect() 
{ 
    return Socialite::driver('facebook')->redirect(); 
} 

public function callback() { 
    $user = $this->findOrCreateFbUser(Socialite::driver('facebook')->user()); 


    session([ 
     'user' => $user 
    ]); 
    return redirect()->route('/'); 

} 

public function logout() { 

    session()->forget('user'); 

    return redirect()->route('home'); 
} 

protected function findOrCreateFbUser($fbUser) { 
    // the data you want to get from facebook 
    $fbData = [ 
     'facebook_id' => $fbUser->id, 
     'avatar'  => $fbUser->avatar, 
     'username'  => $fbUser->name, 
     'email'   => $fbUser->email, 
    ]; 

    $user = \App\User::where('facebook_id', $fbData['facebook_id'])->first(); 

    if(!$user) $user = \App\User::create($fbData); 

    $user->update([ 
     'avatar' => $fbUser->avatar, 
     'username' => $fbUser->name, 
     'email' => $fbUser->email 
    ]); 


    return $user; 
} 

當然,你需要添加一個fa用戶數據庫和模型中的cebook_id字段。 在user.php的:

protected $fillable = [ 
    'facebook_id', 
    'username', 
    'email', 
    'avatar' 

]; 

我知道這個解決方案是不是真的動態的,因爲它是唯一一個API,我仍然在Laravel太漂亮了新的,這是我第一次回答一個stackoverflowquestion,但這對我來說是訣竅:)如果我忘了什麼不要猶豫告訴我,所以我可以更新這個答案..

我還建議您按照Jeffrey Way的Laracasts網站社交授權的教程,這是非常有益的並且很清楚,我可以通過他來管理它!

相關問題