ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

php – Laravel 5通过外部API验证用户

2019-07-06 11:39:20  阅读:219  来源: 互联网

标签:php authentication laravel-5 laravel-5-2 api


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

谢谢.

解决方法:

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

运行你的命令:

composer require laravel/socialite

接下来你需要告诉laravel你想要使用这个包,所以你需要在config / 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;
}

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

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

];

我知道这个解决方案并不是真正的动态,因为它只适用于一个api,我在Laravel上也是新手,这是我对stackoverflowquestion的第一个答案,但这对我来说很有用:)如果我忘记了什么东西不要犹豫告诉我,我可以更新这个答案..

我还建议你在Laracasts网站上关注Jeffrey Way关于社交认证的教程,它非常有启发性和清晰,我可以通过他来管理它!

标签:php,authentication,laravel-5,laravel-5-2,api
来源: https://codeday.me/bug/20190706/1397091.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有