使用smartsheet api:在用户经过身份验证并重定向url后,如何访问用户数据?

gg0vcinb  于 2021-10-10  发布在  Java
关注(0)|答案(1)|浏览(331)

上下文:我将node.js smartsheet oauth流集成到我的django应用程序中,通过django中的登录按钮将用户指向节点服务器上的/auth url。一旦流程完成并且用户通过smartsheet登录,smartsheet开发工具中的重定向url会将用户带回django网站。
目标:我尝试访问用户数据,以便在他们登录名为user=undefined的变量之前和登录名为user的变量之后,都是一个对象,其中包含一组来自smartsheet api的用户数据。此对象将包括:id、电子邮件、名字、姓氏等。。。
我尝试了几种方法:
我试图从oauth流生成并保存令牌数据的/callback url中获取数据,但遭到拒绝,可能是由于安全调用的原因
我尝试为当前用户处理“原始令牌请求”,可能是从node.js服务器访问它们,然后通过post请求发送数据。我还没有让它工作,而且在发布用户数据时让django应用程序在django应用程序中尝试将用户与他们的数据进行匹配似乎是不正确的。
我错过了什么明显的东西吗?如何最好地从刚刚登录的用户获取用户数据?我想为他们显示用户名,并将他们的用户名标记为他们在应用程序中对smartsheet文件所做的更改。
谢谢你的帮助!

vi4fp9gy

vi4fp9gy1#

在oauth流期间,用户在弹出对话框中选择“允许”后,smartsheet将重定向到您指定的回调url,并在回调url的末尾包含一些查询字符串参数。其中一个参数是 code 参数,一个字符串值,您可以随后使用该值为该用户获取api访问令牌。
例如,假设这是用户在弹出对话框中选择“允许”后重定向到的url: http://localhost:3000/callback?code=sample6p9qisx6a&expires_in=599080&state=MY_STATE 在本例中 code 参数为 sample6p9qisx6a .
此时,您可以发出 POST /token 请求获取用户的api访问令牌。api文档中的请求访问令牌部分描述了如何发出此请求。请注意,它需要的参数之一是 code --设置为 code 以前在回调url中收到的查询字符串参数。
对该事件的成功回应 POST /token 请求将包含该属性 access_token 如本例所示:

{
    "token": {
        "access_token": "ll352u9jujauoqz4gstvsae05",
        "token_type": "bearer",
        "refresh_token": "e9x352a9mp4151le2505",
        "expires_in": 604799
    }
}

此时,您可以使用访问令牌发出获取当前用户请求: GET users/me . 请注意,访问令牌是作为请求的一部分指定的 Authorization 标头,此格式(注意:您将替换令牌 ll352... 在本例中,使用 access_token 您收到的对上一次访问的响应 POST /token 请求): Authorization: Bearer ll352u9jujauoqz4gstvsae05 对get current user请求的成功响应将是一个userprofile对象,其中包含有关用户的所有信息:

{
  "id": 48569348493401200,
  "email": "john.doe@smartsheet.com",
  "firstName": "John",
  "lastName": "Doe",
  "locale": "en_US",
  "timeZone": "US/Pacific",
  "account": {
    "name": "Team Smartsheet",
    "id": 942513719853956
  },
  "admin": true,
  "licensedSheetCreator": true,
  "groupAdmin": true,
  "resourceViewer": true,
  "jiraAdmin": false,
  "salesforceAdmin": false,
  "salesforceUser": false,
  "alternateEmails": [
    {
      "id": 12345,
      "email": "altEmail1@smartsheet.com",
      "confirmed": true                
    }
  ],
  "title": "Senior Sales Representative",
  "department": "Marketing",
  "company": "Smartsheet",
  "workPhone": "",
  "mobilePhone": "206 123-4567",
  "role": "Sales",
  "profileImage": {
    "imageId": "u!1!8ljad7w9-aY!AsDeH0wWv1Y!y9VvAgUOFdg",
    "height": 1050,
    "width": 1050
  },
  "sheetCount": 3,
  "lastLogin": "2016-08-15T18:32:47Z",
  "customWelcomeScreenViewed": "2016-08-12T12:15:47Z"
}

相关问题