0

我想在我的 Flask/Python 应用程序中执行的操作与我在 PHP 中执行的操作类似。在 PHP 中,我能够创建一个新的 facebook 对象,如果用户已经授权该应用程序并且已经登录到他们的 Facebook 帐户,他们的信息将被加载到该对象中,他们不必单击“登录”在网站上使用 Facebook”——它会自动意识到他们已经登录并获得授权。

使用我的 Python 应用程序,我正在使用https://github.com/pythonforfacebook/facebook-sdk/

@app.route('/login')
def login():
    return facebook.authorize(callback=url_for('facebook_authorized',
        next=request.args.get('next') or request.referrer or None,
        _external=True))


@app.route('/login/authorized')
@facebook.authorized_handler
def facebook_authorized(resp):
    if resp is None:
        return 'Access denied: reason=%s error=%s' % (
            request.args['error_reason'],
            request.args['error_description']
        )
    session['oauth_token'] = (resp['access_token'], '')
    me = facebook.get('/me')

    usr = Users.query.filter_by(fb_id=me.data['id']).first()

    if (hasattr(usr, 'fb_id'))==False:
        # Find them in our database and log them in
    else:
        # Sign them up

    return redirect(url_for('home'))

有没有一种方法可以设置它,以便可以在整个应用程序中使用 me 对象,从而允许自动登录,因为我可以在页面加载时执行此步骤而无需用户访问登录 URL?

目前,用户必须访问 /login 才能检索他们的 Facebook 信息。是否可以像在 PHP 中那样执行此操作,它可以是整个脚本中使用的变量?- 抱歉听起来多余,我不知道如何解释清楚。

在 PHP 中,一些示例代码如下所示 - 这将在每次页面加载时调用,而不需要用户访问 /login URL 以使用他们的 Facebook 登录。

<?php
if(!$this->getUser()){


    $facebook = new Facebook(array(
      'appId'  => '',
      'secret' => '',
    ));

    $this->fbuser = $facebook->getUser();

    if ($this->fbuser) {
# etc..
?>
4

1 回答 1

0

Not too familiar with Flask, but it seems to me that logically, your unauthorized access handler could first attempt to log in the user using Facebook before rejecting their page load request.

于 2012-07-01T01:28:37.873 回答