我想知道是否可以擴展內置身份驗證以使用外部API對用戶進行身份驗證?我是Laravel的新手,所以我會很感激你的幫助。 我在Laravel 5.2中爲我的客戶端定製了一個應用程序,但我不直接訪問他們的數據庫服務器,我只能調用他們的API來獲取用戶的詳細信息。Laravel 5通過外部API對用戶進行身份驗證
謝謝。
我想知道是否可以擴展內置身份驗證以使用外部API對用戶進行身份驗證?我是Laravel的新手,所以我會很感激你的幫助。 我在Laravel 5.2中爲我的客戶端定製了一個應用程序,但我不直接訪問他們的數據庫服務器,我只能調用他們的API來獲取用戶的詳細信息。Laravel 5通過外部API對用戶進行身份驗證
謝謝。
如果我理解正確,你想記錄用戶從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網站社交授權的教程,這是非常有益的並且很清楚,我可以通過他來管理它!
過去,我構建了一個自定義身份驗證驅動程序和用戶模型,它將用戶存儲在會話中,而不是鏈接到數據庫。這意味着用戶不能互相交互,並且只要會話中斷,該用戶「不存在」,但是在應用程序本身不需要存儲任何有狀態數據的情況下,它已經足夠用了。 – samlev
外部API本身是否有任何認證機制(OA OAuth)? –
我的API仍然沒有完整的文檔,但OAuth無法確定。我相信我需要通過JSON調用來驗證用戶身份。 @samlev你有一些代碼示例可以幫助找出解決方案嗎? – Kasta