OAuth Acces Token Verification в node.js - PullRequest
0 голосов
/ 21 июня 2020

Я работаю над приложением flutter и хотел бы использовать facebook и google oauths для аутентификации моих пользователей. Вот код на стороне клиента, который отлично работает.

import 'package:flutter/material.dart';
import 'package:flutter_facebook_login/flutter_facebook_login.dart';
import 'package:http/http.dart' as http;
import 'dart:convert' as JSON;

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  bool isLoggedIn = false;
  Map userProfile;
  final facebookLogin = FacebookLogin();

  _loginWithFB() async {
    final result = await facebookLogin.logIn(['email']);

    switch (result.status) {
      case FacebookLoginStatus.loggedIn:
        final token = result.accessToken.token;
        final graphResponse = await http.get(
            'https://graph.facebook.com/v2.12/me?fields=name,picture,email&access_token=${token}');
        final profile = JSON.jsonDecode(graphResponse.body);
        print(profile);
        setState(() {
          userProfile = profile;
          isLoggedIn = true;
        });
        break;

      case FacebookLoginStatus.cancelledByUser:
        setState(() => isLoggedIn = false);
        break;
      case FacebookLoginStatus.error:
        setState(() => isLoggedIn = false);
        break;
    }
  }

  _logoutWithFB() {
    facebookLogin.logOut().then((value) => setState(() => isLoggedIn = false));
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: isLoggedIn
            ? Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                  Image.network(
                    "http://placehold.it/50x50",
                    height: 50.0,
                    width: 50.0,
                  ),
                  SizedBox(
                    height: 50.0,
                  ),
                  OutlineButton(
                    onPressed: _logoutWithFB,
                    child: Text('Logout'),
                  ),
                ],
              )
            : OutlineButton(
                onPressed: _loginWithFB,
                child: Text('Facebook login'),
                color: Colors.blueAccent,
              ),
      ),
    );
  }
}

Лог c, который я хочу использовать, предназначен для входа в систему, пользователь регистрируется с помощью facebook или google, я получаю базовый c info и попросите пользователя добавить дополнительную информацию на другом экране, затем при отправке информация о пользователе и токен отправляются на бэкэнд (это node.js api). \

На оборотной стороне I хотите проверить токен, полученный от внешнего интерфейса, с помощью facebook или google, и если идентификатор профиля соответствует полученному, информация о пользователе, полученная от внешнего интерфейса, сохраняется, тогда JWT будет создан и отправлен на внешний интерфейс.

Моя задача теперь состоит в том, как проверить токен oauth на стороне node.js.

1 Ответ

0 голосов
/ 21 июня 2020

Пользователь -> Войти в Facebook -> Токен сгенерирован -> Токен отправлен на бэкэнд -> Промежуточное ПО Nodejs -> проверить наличие user_id -> сгенерировать JWT -> sendBackTo clientSide.

Это очень просто. в этом случае создайте функцию промежуточного программного обеспечения в вашем сервере nodejs.

const express = require("express");
const app = express();

//function that return JWT token
String check_user_id(req,res,next)  async
{
var uid = req.params.uid
//Query database check if userIdexist or not 
check_db(uid) 
//if it exist
next();
return GenerateJwt(userId)
else 
{
//Signup the userid
SignUp(userId);
//generateJWT
next();
return GenerateJwt(userId); 
}

}

app.get('/check_uid/:uid',check_user_id,(res,req,next) => 
{

res.send({'message':'verified'});

}
...