github.GithubException.GithubException:401在Heroku上,当要在用户';s公共回购-Github API

github.GithubException.GithubException:401在Heroku上,当要在用户';s公共回购-Github API,heroku,github-api,pygithub,flask-oauthlib,github-app,Heroku,Github Api,Pygithub,Flask Oauthlib,Github App,我正在使用python、Flask_OAuthlib和heroku制作这个应用程序,以访问用户Github的公共repo,并创建一个repo,并在那里复制所需的文件。该应用程序将连接,并作为授权的OAuth应用程序接收以下权限。 然后我有了这段代码,可以在用户Github的公共repos空间中创建一个存储库,并在那里复制一些文件 177 @app.route('/replicate', methods=['GET', 'POST']) 178 def replicate(): 179

我正在使用python、Flask_OAuthlib和heroku制作这个应用程序,以访问用户Github的公共repo,并创建一个repo,并在那里复制所需的文件。该应用程序将连接,并作为授权的OAuth应用程序接收以下权限。

然后我有了这段代码,可以在用户Github的公共repos空间中创建一个存储库,并在那里复制一些文件

177   @app.route('/replicate', methods=['GET', 'POST'])
178   def replicate():
179  
170       g = Github(theToken)
181       repo_name = request.form['repo']
182       user = g.get_user()
183       repo = user.create_repo(repo_name)  
当用户按下按钮时会触发此代码,该按钮仅在登录时才可访问,并且应用程序显示其Github中的用户名和配置文件图片。因此,在与Github的会话中,这是非常好的。但是heroku犯了这个错误:

我可以看出身份验证存在问题
通过这种方式捕获通话
。首先,我在代码顶部创建了一个
theToken=None
,然后在
/login
部分中,我将其捕获如下:

78   @github.tokengetter
79   def get_github_oauth_token():
80       theToken = session.get('github_token')
81       return session.get('github_token')

我想知道我在这里错过了什么。谢谢你的帮助

我能解决这个问题。出于某种原因,定义一个全局变量来获取<代码>并在以后使用它是行不通的。我只是简单地将line
80
移动到line
179
,现在它工作得很好! 哦,还有一个小小的修正:
theToken=session.get('github\u token')[0]
,因为get函数返回一个长度为2的元组,其中第一个值是访问令牌,第二个值是密钥


希望这个问题和答案能对将来的人有所帮助

旁白:第80行的语句没有任何作用。什么是
github.tokengetter
。谢谢你的回答@chris。第80行实际上有效。正如我在回答中提到的那样,它只返回一个元组。tokengetter与flask_oauthlib相关,您可以在第80行“works”中找到更多信息,但它没有任何作用。如果您在下一行
返回token
,您将使用第80行的值,但您正在调用
会话。再次获取