gpt4 book ai didi

facebook - Laravel Passport 和 Ionic2 Facebook 登录

转载 作者:行者123 更新时间:2023-12-01 15:29:21 26 4
gpt4 key购买 nike

我正在开发一个移动应用程序,它应该对自己的 laravel 后端进行 API 调用。

前端 Ionic 2 + Angular2

后端 Laravel 5.3 + Laraval Passport + MySQL

用户可以使用密码授予(用户名+密码)登录。

现在我想通过 Facebook 提供登录。

我在应用程序中实现了使用 Facebook 登录按钮。这很好用。我从 Facebook API 获取个人资料信息:id、电子邮件、姓名

现在这个用户(没有来 self 们服务器的电子邮件+密码组合)应该能够对我们的 Laravel 服务器进行 API 调用,并且应该链接到 laravel 后端后面的 MySQL 数据库的用户表中的用户。使用 Facebook 登录的用户不需要任何用户名或密码即可登录。只是 Facebook。

我想在数据库中为每个 facebook 用户生成一个新用户(只需使用一列 facebook_id)。 但是如何给这样的用户一个access_token呢?

仅接受 Facebook ID,在数据库中匹配此(或创建新的)用户并创建 access_token 将非常不安全,因为 Facebook ID 是公开的...

最佳答案

我必须说几周前我遇到了同样的问题。我得到的唯一区别是我同时拥有 ionic2 应用程序和网站。两者都必须支持用户名/密码登录作为社交登录(google、facebook)。

那么我是怎么做到的(我会为 facebook 写文章,google 略有不同 - 更好):

  1. 准备您的 Facebook 应用程序以接受来自移动设备和网页的登录。您将需要 facebook client_id 和 client_secret。
  2. 安装 socialite laravel 包。并将其设置为与 facebook 一起使用(在 app/services.php set facebook 中)。

现在,当你得到这个后,你就可以开始编码了。你说你已经在 Ionic2 部分上工作了。因此,这意味着您可以从 Facebook 获取用户的 token 和其他数据。

我所做的是向我的 api 发出请求并发送此 token 和 user_id。然后在我的 API 端检查 token 是否有效、登录用户并颁发护照 token 。

Ionic2 代码:

Facebook.login(["public_profile"])
.then(response => {
// login success send response to api and get token (I have auth service class to do that)
this.auth.facebookLogin(response.authResponse).then(
...
);
}, error => {
this.showAlert( this.loginFailedTitle, this.loginFailedText );
});

现在是 Laravel 部分。我制作了 SocialController.php 和 url(POST 请求)/api/social-login/facebook:

<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Model\SocialLogin;
use App\User;
use Illuminate\Http\Request;
use Socialite;

class SocialController extends Controller
{
public function facebook(Request $request) {
$user = Socialite::driver('facebook')->userFromToken( $request->input('accessToken'));

abort_if($user == null || $user->id != $request->input('userID'),400,'Invalid credentials');

// get existing user or create new (find by facebook_id or create new record)
$user = ....

return $this->issueToken($user);
}

private function issueToken(User $user) {
$userToken = $user->token() ?? $user->createToken('socialLogin');

return [
"token_type" => "Bearer",
"access_token" => $userToken->accessToken
];
}
}

现在这将返回您的护照 token ,您可以向 protected 路线发出 api 请求。

关于护照、电子邮件、用户名……您将不得不更改数据库并使其可为空。并添加 facebook_id 字段。

请务必通过 https 发出请求,因为您正在发送 token 。

希望对您有所帮助。

关于facebook - Laravel Passport 和 Ionic2 Facebook 登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41792398/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com