Влизането в Flask-Social Twitter е неуспешно със съобщение - OAuthException: Неуспешно генериране на токен за заявка

Не мога да накарам нито Facebook, нито Twitter да работят с Flask-Social (https://pythonhosted.org/Flask-Social/), следвайки примера тук: http://flask-social-example.herokuapp.com/

Фокусирайки се върху случая с Twitter, извиквам Flask-social на HTML страницата за вход по следния начин: {{ social_login('twitter', 'Twitter' )}}

и използване на HTML страницата за регистрация:
{{ social_register('twitter', 'Twitter' )}}

Ето моят код във views.py:

@app.route('/register', methods=['GET', 'POST'])
@app.route('/register/<provider_id>', methods=['GET', 'POST'])
def register(provider_id=None):
    if current_user.is_authenticated():
        return redirect('/landing')

    form = RegisterForm()

    if provider_id:
        print("provider!!")

        return twitter.authorize(callback=url_for('oauth_authorized',
        next=request.args.get('next') or request.referrer or None))

    else:
        print("no provider!!")
        provider = None
        connection_values = None

    if form.validate_on_submit():
        print("enter validate on submit")
        ds = app.security.datastore
        user = ds.create_user(email=form.email.data, password=form.password.data)
        ds.commit()

        # See if there was an attempted social login prior to registering
        # and if so use the provider connect_handler to save a connection
        connection_values = session.pop('failed_login_connection', None)

        if connection_values:
            print("enter connection_values")
            connection_values['user_id'] = user.id
            connect_handler(connection_values, provider)

        if login_user(user):
            ds.commit()
            flash('Account created successfully', 'info')
            return redirect(url_for('rightform'))

        return render_template('thanks.html', user=user)

    login_failed = int(request.args.get('login_failed', 0))

    return render_template('register.html',
                           form=form,
                           provider=provider,
                           login_failed=login_failed,
                           connection_values=connection_values)

Това води до следната следа:

  Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1836, in __call__
    return self.wsgi_app(environ, start_response)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1820, in wsgi_app
    response = self.make_response(self.handle_exception(e))
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1403, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1817, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1477, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1381, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1475, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1461, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/usr/local/lib/python2.7/dist-packages/flask_security/decorators.py", line 205, in wrapper
    return f(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/flask_social/views.py", line 49, in login
    return provider.authorize(callback_url)
  File "/usr/local/lib/python2.7/dist-packages/flask_oauth.py", line 331, in authorize
    token = self.generate_request_token(callback)[0]
  File "/usr/local/lib/python2.7/dist-packages/flask_oauth.py", line 299, in generate_request_token
    type='token_generation_failed')
OAuthException: Failed to generate request token

Почти съм сигурен, че двойката тайни работи правилно, защото мога да използвам Flask-OAuth и да получавам различни грешки, които предполагат, че поне съм стигнал до URL адреса за обратно извикване.


person SQLesion    schedule 31.07.2014    source източник


Отговори (1)


Мисля, че трябва да настроите URL адреса за обратно извикване в приложението twitter, например вашето приложение е такова

http://myapp.com

URL адресът за обратно извикване трябва да бъде

http://myapp.com/login/twitter

Чао!

person chudi    schedule 27.08.2014