使用 Smartsheet API:如何在用户通过身份验证并进行重定向后访问用户数据 url?
Using Smartsheet API: How do I access user data after a user is authenticated and taken to redirect url?
上下文:我通过让 django 中的登录按钮将用户定向到节点服务器上的 /auth url,将 Node.js Smartsheet Oauth 流程集成到我的 Django 应用程序中。流程完成并且用户通过 Smartsheet 登录后,来自 Smartsheet 开发工具的重定向 URL 会将用户带回 Django 网站。
Objective:我正在尝试访问用户数据,以便在他们登录一个名为 user = undefined 的变量之前,在他们登录之后,名为 user 的变量是一个具有一组用户的对象来自智能表 API 的数据。此对象将包括:id、电子邮件、名字、姓氏等...
我试过几种方法:
- 我尝试从 /callback url 获取数据,OAuth 流程在其中生成并保存令牌数据,但遭到拒绝,这可能是由于深思熟虑的安全协议调用
- 我试过为当前用户玩“原始令牌请求”,可能从 Node.js 服务器访问它们,然后通过 post 请求发回数据。我还没有让它工作,post 用户数据似乎不正确,并且让 django 应用程序在 django 应用程序内部尝试将用户与其数据匹配。
我是不是遗漏了什么明显的东西?如何最好地从刚登录的用户那里获取用户数据?我想为他们显示他们的用户名,并将他们的用户名标记为他们从应用程序对智能表文件所做的更改。
感谢您的帮助!
用户在 OAuth 流程中的弹出对话框中选择 Allow 后,Smartsheet 重定向到您指定的回调 URL,并包含一些查询字符串参数回调结束 URL。其中一个参数是 code
参数,这是一个字符串值,您随后可以使用它来获取该用户的 API 访问令牌。
例如,假设这是用户在弹出对话框中选择 允许 后重定向到的 URL:
http://localhost:3000/callback?code=sample6p9qisx6a&expires_in=599080&state=MY_STATE
在本例中,code
参数的值为sample6p9qisx6a
。
此时,您可以发出 POST /token
请求以获取用户的 API 访问令牌。 API 文档的 Request an Access Token 部分描述了如何发出此请求。请注意,它需要的参数之一是 code
——设置为先前在回调 URL.
中收到的 code
查询字符串参数的值
对 POST /token
请求的成功响应将包含 属性 access_token
,如本例所示:
{
"token": {
"access_token": "ll352u9jujauoqz4gstvsae05",
"token_type": "bearer",
"refresh_token": "e9x352a9mp4151le2505",
"expires_in": 604799
}
}
此时,您可以使用访问令牌发出Get Current User请求:GET users/me
。请注意,访问令牌以这种格式指定为请求的 Authorization
header 的一部分(注意:您将在此示例中将令牌 ll352...
替换为 access_token
属性 您收到了对您之前 POST /token
请求的回复:
Authorization: Bearer ll352u9jujauoqz4gstvsae05
对 获取当前用户 请求的成功响应将是一个 UserProfile object,其中包含有关用户的所有信息:
{
"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"
}
100% 有效,但设置过程非常繁琐。
用户点击登录后(从 django 服务器),他们被重定向到节点服务器,Oauth 进程的启动将他们带到授权 url(坦率地说,我使用节点 b/c 已经有示例代码)
然后它将用户重定向回授权代码在 url 中的网站。
然后你必须从 url 中提取代码,我尝试将该代码与 react/redux thunk 请求一起使用,但是 CORS 阻止了来自浏览器的请求,所以我无法做到这一点反应中的请求。
相反,我不得不使用 post 请求将此代码发送到 Django 后端。在 React 之后直接检查 post 请求的 return 以找到其 post 请求的 pk(条目 ID),并使用它向特定的 get/retrieve 请求入口编号。这个对其余 api 的获取请求最终在 views.py 中结束,其中触发了使用请求库并获取授权令牌 (user_data.objects.last()) 的外部 module/script。这些请求基于网站上的 curls,但已转换为请求。脚本完成后 运行 我有了用户数据。然后将此数据修补到数据库条目中(部分更新),并且由于 python 是同步的,因此在外部脚本完成之前获取请求无法完成,到那时获取请求所需的数据已在数据库中。
get 请求完成后,react 解析 json,并将其 post 发送到 redux 存储(因为我使用的是 redux)。
可能有更好的方法(因为我是新手),但对于将来寻找如何做到这一点的任何人来说,很有可能按照我描述的方式...
上下文:我通过让 django 中的登录按钮将用户定向到节点服务器上的 /auth url,将 Node.js Smartsheet Oauth 流程集成到我的 Django 应用程序中。流程完成并且用户通过 Smartsheet 登录后,来自 Smartsheet 开发工具的重定向 URL 会将用户带回 Django 网站。
Objective:我正在尝试访问用户数据,以便在他们登录一个名为 user = undefined 的变量之前,在他们登录之后,名为 user 的变量是一个具有一组用户的对象来自智能表 API 的数据。此对象将包括:id、电子邮件、名字、姓氏等...
我试过几种方法:
- 我尝试从 /callback url 获取数据,OAuth 流程在其中生成并保存令牌数据,但遭到拒绝,这可能是由于深思熟虑的安全协议调用
- 我试过为当前用户玩“原始令牌请求”,可能从 Node.js 服务器访问它们,然后通过 post 请求发回数据。我还没有让它工作,post 用户数据似乎不正确,并且让 django 应用程序在 django 应用程序内部尝试将用户与其数据匹配。
我是不是遗漏了什么明显的东西?如何最好地从刚登录的用户那里获取用户数据?我想为他们显示他们的用户名,并将他们的用户名标记为他们从应用程序对智能表文件所做的更改。
感谢您的帮助!
用户在 OAuth 流程中的弹出对话框中选择 Allow 后,Smartsheet 重定向到您指定的回调 URL,并包含一些查询字符串参数回调结束 URL。其中一个参数是 code
参数,这是一个字符串值,您随后可以使用它来获取该用户的 API 访问令牌。
例如,假设这是用户在弹出对话框中选择 允许 后重定向到的 URL:
http://localhost:3000/callback?code=sample6p9qisx6a&expires_in=599080&state=MY_STATE
在本例中,code
参数的值为sample6p9qisx6a
。
此时,您可以发出 POST /token
请求以获取用户的 API 访问令牌。 API 文档的 Request an Access Token 部分描述了如何发出此请求。请注意,它需要的参数之一是 code
——设置为先前在回调 URL.
code
查询字符串参数的值
对 POST /token
请求的成功响应将包含 属性 access_token
,如本例所示:
{
"token": {
"access_token": "ll352u9jujauoqz4gstvsae05",
"token_type": "bearer",
"refresh_token": "e9x352a9mp4151le2505",
"expires_in": 604799
}
}
此时,您可以使用访问令牌发出Get Current User请求:GET users/me
。请注意,访问令牌以这种格式指定为请求的 Authorization
header 的一部分(注意:您将在此示例中将令牌 ll352...
替换为 access_token
属性 您收到了对您之前 POST /token
请求的回复:
Authorization: Bearer ll352u9jujauoqz4gstvsae05
对 获取当前用户 请求的成功响应将是一个 UserProfile object,其中包含有关用户的所有信息:
{
"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"
}
100% 有效,但设置过程非常繁琐。
用户点击登录后(从 django 服务器),他们被重定向到节点服务器,Oauth 进程的启动将他们带到授权 url(坦率地说,我使用节点 b/c 已经有示例代码)
然后它将用户重定向回授权代码在 url 中的网站。
然后你必须从 url 中提取代码,我尝试将该代码与 react/redux thunk 请求一起使用,但是 CORS 阻止了来自浏览器的请求,所以我无法做到这一点反应中的请求。
相反,我不得不使用 post 请求将此代码发送到 Django 后端。在 React 之后直接检查 post 请求的 return 以找到其 post 请求的 pk(条目 ID),并使用它向特定的 get/retrieve 请求入口编号。这个对其余 api 的获取请求最终在 views.py 中结束,其中触发了使用请求库并获取授权令牌 (user_data.objects.last()) 的外部 module/script。这些请求基于网站上的 curls,但已转换为请求。脚本完成后 运行 我有了用户数据。然后将此数据修补到数据库条目中(部分更新),并且由于 python 是同步的,因此在外部脚本完成之前获取请求无法完成,到那时获取请求所需的数据已在数据库中。
get 请求完成后,react 解析 json,并将其 post 发送到 redux 存储(因为我使用的是 redux)。
可能有更好的方法(因为我是新手),但对于将来寻找如何做到这一点的任何人来说,很有可能按照我描述的方式...