Flask-Authlib で Gmail API を使用してメールにアクセスしようとしています。ユーザーの承認後、サーバーはアクセストークンをセッションに配置し、反応ルートに誘導し/test
ます。によって呼び出された反応コンポーネントでは、電子メール情報のバックエンドの別のメソッドにリクエストを/test
送信しますGET
が、セッションの有効期間を十分に長く設定しても、アクセス トークンはもう存在しません。
フローは次のようになります: ログイン -> 承認済み (フロントエンドに戻る) -> バックエンドに Get リクエストを送信します/index
。
どんな助けでも大歓迎です。
サーバ:
@app.route('/index')
def index():
print(get_access_token()) # does not work
if 'access_token' in session:
me = gmail.get('userinfo')
user_id = me.data['id']
access_token = get_access_token()
start = time.time()
inbox = Inbox(gmail, access_token, user_id)
emails = inbox.emails
end = time.time()
return jsonify({
"emails": emails,
'me': user_id,
'count': len(emails),
'time': end - start,
'request time': inbox.request_time
})
return jsonify({
'status': 403,
'session': session.get('access_token')
})
@app.route('/login')
def login():
return gmail.authorize(callback=url_for('authorized', _external=True))
@app.route('/logout')
def logout():
session.pop('access_token', None)
return redirect(url_for('index'))
@app.route('/authorized')
def authorized():
resp = gmail.authorized_response()
if resp is None:
return 'Access denied: reason={} error={}'.format(
request.args['error_reason'],
request.args['error_description']
)
session['access_token'] = (resp['access_token'], '')
print(get_access_token()) # works
return redirect('test')
@gmail.tokengetter
def get_access_token():
return session.get('access_token')
クライアント:
const Test = React.createClass({
componentDidMount() {
fetch('/index')
.then(response => {
return response.json()
})
.then(json => {
console.log(json)
})
.catch(ex => {
console.log(ex)
})
},
render() {
return (
<div>
tsetdsfadsf
</div>
)
}
})
render((
<Router history={history}>
<Route component={App}>
<Route path="/" component={Index} />
<Route path="/test" component={Test} />
</Route>
</Router>
), document.getElementById('content'))