在回调函数nodejs中传递属性

问题描述 投票:1回答:1

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

以下是我的代码

 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'});

增加查询参数 状况 误差为 无效的重定向Uri

重定向后需要用到的数据怎么传递才好呢

node.js redirect paypal parameter-passing paypal-sandbox
1个回答
0
投票

我想你稍微误解了oauth授权的工作原理。基本上,如果你想获得任何数据,你需要在你消耗回调之后再做,并且在你的系统中也验证用户。

你见过Googlegithub等openid auth provider返回一些与调用者系统的数据相对应的数据吗?这是不可能的。

你可能把这个和webhook搞混了,在webhook中,调用者系统在内部调用一个webhook的一些数据,然后你去捕捉它。这在支付交易中是常用的。

但auth略有不同。对于认证有3个系统。

  1. 实际的认证提供者 (Paypalgooglegithub)等。
  2. 身份提供者 基本上是获取配置文件数据等,除了企业系统外,这两个系统根本是一样的。
  3. 呼叫者系统,在这种情况下就是你的NodeJS服务。

=&gt.现在,调用者系统调用auth提供者来获取某种代码,在这种情况下,调用者系统就是你的NodeJS服务。 现在,调用者系统调用auth提供者来获取某种代码,一般是一个auth代码,这意味着用户存在于auth系统中。这意味着用户存在于auth系统中,比如说Google。

=>现在调用者系统调用认证提供者来获取某种代码,一般是认证代码,这意味着用户存在于认证系统中,比如说Google。 然后调用者系统调用身份提供者,用这个认证码检查用户是否也存在于身份提供者(idp)中,idp返回access_token, id_token, refresh_token等(正如我所说,大多数时候这些都是同一个系统)。但是考虑到亚马逊,假设你想登录到 亚马逊 与你 谷歌 帐户。你有一个 谷歌 帐户的权利,但你没有亚马逊帐户,所以你会得到认证码,但不会得到id_token。所以你会得到认证码,但不会得到id_token。

=> 现在,id_token大多数时候包含了一些JWT格式的用户基本信息。但是现在ACCESS_TOKEN是用来对你的系统(调用者系统)进行所有其他调用的。现在就像我说的id_token一些用户数据。你可以在你的NodeJs服务里有一个db表,将userid与账号进行映射。

=&gt.你可以在你的NodeJs服务里有一个db表,把userid和账号映射在一起。 做一个端点来获取账号或其他东西,它需要access_token和id_token。首先验证access_token和验证id_token的签名,然后解密token以获得基本的用户信息,并使用该id从你的表中获取数据并使用该数据。

编辑后。

你可以看到 文档:

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);
});

当你拿到认证码后,你用它来调用 paypal.openIdConnect.tokeninfo.create 并获得代币。然后使用这些代币来调用 paypal.openIdConnect.userinfo.get 来获取用户信息。现在当你得到用户信息后,你就可以创建你想创建的db行了。

你可以在你的 /callback 路线:

© www.soinside.com 2019 - 2024. All rights reserved.