我查看了GitHub OAuth API,发现发送到端点的一个要求是state
。
发送邮件很简单-但是如何验证发送的state
与接收的邮件相同?
我曾考虑使用browser caching,但似乎是为了查看Django并提高性能。
我认为sending a CSRF token是state
,但这似乎是针对您生成的表单。
简而言之,如何在Django中验证state
? Django中是否有Python方式?
答案 0 :(得分:0)
用户的session是存储与会话相关的变量的最佳位置,这里就是这种情况。
因此,请生成您的request.session['github_state'] = state
return render(<template with github link>, context={'state': state})
并将其存储到用户的会话中:
if request.session.get('github_state') and not request.GET.get('state') == request.session['github_state']:
# abort here
else:
code = request.GET.get('code')
# POST request with code to GitHub to fetch the access token
然后,当您收到用户的授权GET请求时:
chrome.webRequest.onBeforeSendHeaders.addListener(function(details){
console.log(details.url);
},
{
urls: ["<all_urls>"]
},
["requestHeaders", "blocking"]);
我正在检查会话变量不是空/无,否则两个都可能为空并且检查将通过。