node.js - OAuth 访问 node.js 中的令牌验证
问题描述
我正在开发一个颤振应用程序,并希望使用 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,
),
),
);
}
}
我要使用的逻辑是登录,用户使用 facebook 或 google 注册,我得到一些基本信息并要求用户在另一个屏幕中添加一些进一步的信息,然后在提交时用户信息和令牌被发送到后端(这是一个 node.js api)。\
在背面,我想使用 facebook 或 google 验证从前端收到的令牌,如果配置文件 id 与收到的用户信息匹配,则保存从前端收到的用户信息,然后将创建一个 JWT 并将其发送到前端.
我现在的挑战是如何在 node.js 端验证 oauth 令牌。
解决方案
用户 -> 登录 Facebook -> 生成令牌 -> 发送到后端的令牌 -> 中间件 Nodejs -> 检查 user_id 是否存在 -> 生成 JWT -> sendBackTo 客户端。
在这种情况下,您必须在后端 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'});
}
推荐阅读
- javascript - 在 HTML 中的图像顶部添加倾斜覆盖
- mongodb - 如何找到父文档?
- reactjs - 在打字稿中使用变量赋值数组进行解构
- c# - 在asp.net webforms中使用实体框架(代码优先方法)在Repeater控件中显示详细信息
- vuejs2 - 条件渲染组件 vue.js
- wordpress - 如何使用 wp_query 在引导网格中显示自定义帖子类型
- django - 在 django 模板中显示 ManyToManyField
- rest - 在 Flutter/dart 中使用 REST API 获取访问令牌
- hazelcast - hazelcast 通过唯一名称给出另一个 Cardinality Estimator 对象
- python - 如何在 Python 3 中以漂亮的方式显示数学方程