facebook - Laravel Passport 和 Ionic2 Facebook 登录

标签 facebook laravel laravel-5.3 laravel-passport

我正在开发一个移动应用程序,它应该对自己的 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/

相关文章:

facebook - 代表 Facebook 页面发帖时出错

php - 如何用 Eloquent 零检索数据

vue.js - 使用 keyup vuejs 和 laravel 即时搜索

mysql - 刷新数据库表迁移时出错

php - 如何将 1 小时添加到约会 Carbon?

facebook - 如何使用 Graph API 或 FQL 获取 Facebook 上分享的前 10 篇文章的列表?

javascript - 使用 Facebook 图形 API 在 Node.js 中检索整个好友列表

php - created_at 列中的时间不正确 - Laravel 5.4

facebook - 是否有可能获得 facebook 页面提供的所有报价

php - 随机 抱歉,找不到您要找的页面 Laravel 5.5