Kas*_*sta 6 php authentication api laravel-5 laravel-5.2
我想知道是否可以扩展内置身份验证以使用外部 API 来对用户进行身份验证?我是 Laravel 新手,所以我很感激你的帮助。我正在为我的客户在 Laravel 5.2 中制作一个自定义应用程序,但我不能直接访问他们的数据库服务器,我只能调用他们的 API 来获取用户的详细信息。
谢谢。
如果我理解正确的话,您想从 facebook、twitter 或 github 等 API 记录用户吗?如果是这样,您需要使用名为 Socialite 的 Laravel 包,这里是下载和使用它的链接:https: //github.com/laravel/socialite
按照你的命令运行:
composer require laravel/socialite
Run Code Online (Sandbox Code Playgroud)
接下来你需要告诉 laravel 你想使用这个包,所以你需要在 config/app.php 中添加它:
'providers' => [
// Other service providers...
Laravel\Socialite\SocialiteServiceProvider::class,
],
Run Code Online (Sandbox Code Playgroud)
这是别名:
'Socialite' => Laravel\Socialite\Facades\Socialite::class,
Run Code Online (Sandbox Code Playgroud)
基本上,您需要在开发人员网站上创建一个应用程序,我将以 facebook 为例。您需要访问此网站: https: //developers.facebook.com/,创建一个帐户,然后您将获取您的应用程序网址和密钥。您将在 .env 和配置/服务文件中使用它。
在您的配置/服务文件中,在 stripe 之后添加以下内容:
'facebook' => [
'client_id' => env('FACEBOOK_ID'),
'client_secret' => env('FACEBOOK_SECRET'),
'redirect' => env('FACEBOOK_URL'),
],
Run Code Online (Sandbox Code Playgroud)
在你的 .env 文件中:
FACEBOOK_ID=*your facebook id*
FACEBOOK_SECRET=*your facebook secret*
FACEBOOK_URL=http://yourwebsite.com/callback
Run Code Online (Sandbox Code Playgroud)
接下来,您需要一个控制器来处理身份验证过程,创建类似 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;
}
Run Code Online (Sandbox Code Playgroud)
当然,您需要在用户数据库和模型中添加 facebook_id 字段。在 User.php 中:
protected $fillable = [
'facebook_id',
'username',
'email',
'avatar'
];
Run Code Online (Sandbox Code Playgroud)
我知道这个解决方案并不是真正动态的,因为它只适用于一个 api,我在 Laravel 上还是个新手,这是我对 stackoverflow 问题的第一个答案,但这对我来说很有效:) 如果我忘记了什么,不要请毫不犹豫地告诉我,以便我可以更新这个答案..
我还建议您关注 Laracasts 网站上的 Jeffrey Way 关于社交身份验证的教程,它非常有启发性且清晰,多亏了他,我才能做到这一点!
| 归档时间: |
|
| 查看次数: |
1383 次 |
| 最近记录: |