Laravel 5通过外部API对用户进行身份验证


Laravel 5 authenticate users through external API

我想知道是否可以扩展内置身份验证以使用外部API对用户进行身份验证?我是拉拉威尔的新手,所以我很感激你的帮助。我正在为我的客户制作Laravel 5.2中的自定义应用程序,但我不能直接访问他们的数据库服务器,我只能调用他们的API来获取用户的详细信息。

谢谢。

如果我理解正确,你想从facebook、twitter或github等API记录用户吗?如果你需要使用一个名为Socialite的laravel包,这里有下载和使用它的链接:https://github.com/laravel/socialite

按照你的命令运行这个:

composer require laravel/socialite

接下来你需要告诉laravel你想使用这个包,所以你需要在config/app.hp:中添加这个

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

这是别名:

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

基本上,你需要在开发者网站上创建一个应用程序,我以facebook为例。您需要访问此网站:https://developers.facebook.com/,创建一个帐户,您将获得您的应用程序url和密钥。您将在.env和config/services文件中使用它。

在您的配置/服务文件中,将其添加到stripe:之后

'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;
}

当然,您需要在用户数据库和模型中添加一个facebook_id字段。在User.php中:

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

我知道这个解决方案并不是真正的动态的,因为它只适用于一个api,我在Laravel还是个新手,这是我对stackoverflow问题的第一个答案,但这对我来说很有用:)如果我忘记了什么,请毫不犹豫地告诉我,这样我就可以更新这个答案。。

我还建议你遵循Jeffrey Way在Laracasts网站上的社交授权教程,它非常有指导性和明确性,多亏了他,我才能做到!