上下文:我将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文件所做的更改。
谢谢你的帮助!
1条答案
按热度按时间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
如本例所示:此时,您可以使用访问令牌发出获取当前用户请求:
GET users/me
. 请注意,访问令牌是作为请求的一部分指定的Authorization
标头,此格式(注意:您将替换令牌ll352...
在本例中,使用access_token
您收到的对上一次访问的响应POST /token
请求):Authorization: Bearer ll352u9jujauoqz4gstvsae05
对get current user请求的成功响应将是一个userprofile对象,其中包含有关用户的所有信息: