首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >回调函数nodejs中的传递属性

回调函数nodejs中的传递属性
EN

Stack Overflow用户
提问于 2020-05-01 18:27:18
回答 1查看 39关注 0票数 1

我用的是paypal-rest-sdk.我面临的问题是,当我进行authorizationUrl调用时,我想传递一些可以在重定向URL中访问的参数。

下面的是我的代码

代码语言:javascript
复制
 import paypal from 'paypal-rest-sdk';
 const openIdConnect = paypal.openIdConnect;

  paypal.configure({
                mode: "sandbox" 
                client_id: //MyClientId,
                client_secret: //MySecretId,
                openid_redirect_uri: `http://myRedirectionEndpoint/account/domestic/paypal/callback?state={accountId:5e8c2291d69ed1407ec86221}`
               });

  openIdConnect.authorizeUrl({scope: 'openid profile'});

添加查询参数状态使错误成为无效的redirectUri

在重定向之后,传递需要使用的数据的最佳方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2020-05-01 19:23:22

我想你有点误解了oauth授权的工作方式。基本上,如果您想获取任何数据,您需要在使用回调并在系统中验证用户之后进行此操作。

您是否见过Google/github等openid提供者返回一些与调用方系统数据相对应的数据?这不可能。

您可能将这与web钩子混淆在一起,调用方系统内部调用带有某些数据的web钩子,然后捕获它。通常用于支付交易中。

但法国的情况略有不同。对于我们来说,有三个系统。

  1. ,实际的auth提供商 (Paypal/google/github)等等。
  2. 是一个身份提供者,它主要获取配置文件、数据等,除了企业系统之外,这两个系统是完全相同的。
  3. 调用者系统,在本例中是您的NodeJS服务。

=>现在呼叫系统调用auth提供程序来获得某种代码,通常是auth代码。这意味着用户存在于auth系统中,比如说Google。

=>然后调用系统调用身份提供者,检查用户是否也在身份提供者( idp )中,并且idp返回access_token、id_token、refresh_token等(正如我所说的,大多数情况下这些系统是相同的)。但是以amazon为例,假设您想用您的Google帐户登录Amazon。你有一个谷歌帐户,好吧,但你没有亚马逊帐户。因此,您将得到auth代码,但不会得到id_token。

=>,现在大多数情况下,id_token以JWT格式包含用户的一些基本信息。但是现在ACCESS_TOKEN被用来执行对系统(调用方系统)的所有其他调用。现在,正如我所说的,id_token是某种用户数据。可以在NodeJs服务中使用带有帐号的db表映射userid。

=>创建一个端点来获取帐户号或使用access_token和id_token的东西。首先验证access_token并验证id_token的签名,然后解密令牌以获取基本的用户信息。并使用该id从表中获取数据并使用该数据。

编辑后的

您可以在文档中看到

代码语言:javascript
复制
paypal.configure({
  'openid_client_id': 'CLIENT_ID',
  'openid_client_secret': 'CLIENT_SECRET',
  'openid_redirect_uri': 'http://example.com' });

// Authorize url
paypal.openIdConnect.authorizeUrl({'scope': 'openid profile'});

// Get tokeninfo with Authorize code
paypal.openIdConnect.tokeninfo.create("Replace with authorize code", function(error, tokeninfo){
  console.log(tokeninfo);
});

// Get userinfo with Access code
paypal.openIdConnect.userinfo.get("Replace with access_code", function(error, userinfo){
  console.log(userinfo);
});

当您获得auth代码时,可以使用它来调用paypal.openIdConnect.tokeninfo.create并获取令牌。然后使用这些令牌调用paypal.openIdConnect.userinfo.get来获取用户信息。现在,当您获得userinfo时,您将能够创建要创建的db行。

您可以在您的/callback路由中添加以下两个调用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61548465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档