googleoauth 2使用flask_nugooglelogin

2024-09-28 22:04:32 发布

您现在位置:Python中文网/ 问答频道 /正文

Stackoveflow成员您好

我正在使用Oauth进行googleplus用户认证,同时我需要获取用户配置文件、图片和驱动器信息。最好的方法是使用Oauth。所以我使用flask_googlelogin。在

我想用示例.py但是我发现这个API运行得很好,我的应用程序页面上出现了信息和Cancel和Accept按钮。但是当我按下accept按钮,我得到了烧瓶错误

TypeError:“instancemethod”对象没有属性“getitem

现在请看一下示例.py代码和烧瓶_googlelogin.py代码

这里

import json

from flask import Flask, url_for, redirect, session

from flask_login import (UserMixin, login_required, login_user, logout_user,
                     current_user)
from flask_googlelogin import GoogleLogin


users = {}


app = Flask(__name__)
    app.config.update(
    SECRET_KEY='<secret_key>',
    GOOGLE_LOGIN_CLIENT_ID='<client_id>',
    GOOGLE_LOGIN_CLIENT_SECRET='<client_secret>',
    GOOGLE_LOGIN_REDIRECT_URI='<redirection_url>')
googlelogin = GoogleLogin(app)


class User(UserMixin):
    def __init__(self, userinfo):
        self.id = userinfo['id']
        self.name = userinfo['name']
        self.picture = userinfo.get('picture')


@googlelogin.user_loader
def get_user(userid):
    return users.get(userid)


@app.route('/')
def index():
    return """
        <p><a href="%s">Login</p>
        <p><a href="%s">Login with extra params</p>
        <p><a href="%s">Login with extra scope</p>
    """ % (
        googlelogin.login_url(approval_prompt='force'),
        googlelogin.login_url(approval_prompt='force',
                          params=dict(extra='large-fries')),
        googlelogin.login_url(
            approval_prompt='force',
            scopes=['https://www.googleapis.com/auth/drive'],
            access_type='offline',
        ),
    )


@app.route('/profile')
@login_required
def profile():
    return """
        <p>Hello, %s</p>
        <p><img src="%s" width="100" height="100"></p>
        <p>Token: %r</p>
        <p>Extra: %r</p>
        <p><a href="/logout">Logout</a></p>
        """ % (current_user.name, current_user.picture, session.get('token'),
               session.get('extra'))


@app.route('/oauth2callback')
@googlelogin.oauth2callback
def login(token, userinfo, **params):
    user = users[userinfo['id']] = User(userinfo)
    login_user(user)
    session['token'] = json.dumps(token)
    session['extra'] = params.get('extra')
    return redirect(params.get('next', url_for('.profile')))


@app.route('/logout')
def logout():
    logout_user()
    session.clear()
    return """
        <p>Logged out</p>
        <p><a href="/">Return to /</a></p>
        """


app.run(debug=True)

还有烧瓶_googlelogin.py代码在这里

^{pr2}$

请记下def oauth2callback中可能有一些受干扰的代码,以及如果代码行是 用户信息=self.get_用户信息(令牌['access_token'])

这里token['access_token']产生错误名称“TypeError:'instancemethod'object没有属性'getitem'”

请告诉我怎样才能修好它


Tags: 代码selftokenappurlgetreturnsession
1条回答
网友
1楼 · 发布于 2024-09-28 22:04:32

看起来像是错误或api更改。在

交换密码

    token = requests.post(GOOGLE_OAUTH2_TOKEN_URL, data=dict(
        code=code,
        redirect_uri=redirect_uri,
        grant_type='authorization_code',
        client_id=self.client_id,
        client_secret=self.client_secret,
    )).json

token现在是json函数。在更新版本的flask_googlelogin中,这是json()。在

相关问题 更多 >