Advertisement
Guest User

Untitled

a guest
Sep 11th, 2016
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.26 KB | None | 0 0
  1. @user_blueprint.route('/callback/<provider>', methods=['GET','POST'])
  2. def oauth_callback(provider):
  3. form = TwitterForm(request.form)
  4. if not current_user.is_anonymous:
  5. return redirect(url_for('main.home'))
  6. oauth = OAuthSignIn.get_provider(provider)
  7. social_id, username, email = oauth.callback()
  8.  
  9. if social_id is None:
  10. flash('Authentication failed!')
  11. return redirect(url_for('main.home'))
  12. user = User.query.filter_by(social_id=social_id).first()
  13. if not user and form.validate_on_submit():
  14. user = User(
  15. email=form.email.data,
  16. password=form.password.data,
  17. confirmed=False,
  18. social_id=social_id,
  19. nickname=username)
  20. db.session.add(user)
  21. db.session.commit()
  22. token = generate_confirmation_token(user.email)
  23. confirm_url = url_for('user.confirm_email', token=token, _external=True)
  24. html = render_template('user/activate.html', confirm_url=confirm_url)
  25. subject = "Please confirm your email"
  26. send_email(user.email, subject, html)
  27. login_user(user,True)
  28. flash('A confirmation email has been sent via email.', 'success')
  29. return redirect(url_for("user.unconfirmed"))
  30. return render_template('user/twitterregister.html', form=form)
  31.  
  32. class TwitterSignIn(OAuthSignIn):
  33. def __init__(self):
  34. super(TwitterSignIn, self).__init__('twitter')
  35. self.service = OAuth1Service(
  36. name='twitter',
  37. consumer_key='pNU7LEHOLEAJH3lQRNwOjiJMH',
  38. consumer_secret='WFe5DVdi5JZ6KtuyRWYP9BkC8905EUp0N56junLtde1vL5w2NR',
  39. request_token_url='https://api.twitter.com/oauth/request_token',
  40. authorize_url='https://api.twitter.com/oauth/authorize',
  41. access_token_url='https://api.twitter.com/oauth/access_token',
  42. base_url='https://api.twitter.com/1.1/'
  43. )
  44.  
  45. def authorize(self):
  46. request_token = self.service.get_request_token(
  47. params={'oauth_callback': self.get_callback_url()}
  48. )
  49. session['request_token'] = request_token
  50. return redirect(self.service.get_authorize_url(request_token[0]))
  51.  
  52. def callback(self):
  53. ***request_token = session.pop('request_token')***
  54. if 'oauth_verifier' not in request.args:
  55. return None, None, None
  56. oauth_session = self.service.get_auth_session(
  57. request_token[0],
  58. request_token[1],
  59. data={'oauth_verifier': request.args['oauth_verifier']}
  60. )
  61. me = oauth_session.get('account/verify_credentials.json').json()
  62. social_id = 'twitter$' + str(me.get('id'))
  63. username = me.get('screen_name')
  64. return social_id, username, None # Twitter does not provide email
  65.  
  66. Traceback (most recent call last):
  67. File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1836, in __call__
  68. return self.wsgi_app(environ, start_response)
  69. File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1820, in wsgi_app
  70. response = self.make_response(self.handle_exception(e))
  71. File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1403, in handle_exception
  72. reraise(exc_type, exc_value, tb)
  73. File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1817, in wsgi_app
  74. response = self.full_dispatch_request()
  75. File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1477, in full_dispatch_request
  76. rv = self.handle_user_exception(e)
  77. File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1381, in handle_user_exception
  78. reraise(exc_type, exc_value, tb)
  79. File "/usr/local/lib/python2.7/site-packages/flask/app.py", line 1475, in full_dispatch_request
  80. rv = self.dispatch_request()
  81. File "/usr/local/lib/python2.7/site-packages/flask_debugtoolbar/__init__.py", line 125, in dispatch_request
  82. return view_func(**req.view_args)
  83. File "/Users/Ben/Desktop/flask_practise/project/user/views.py", line 89, in oauth_callback
  84. social_id, username, email = oauth.callback()
  85. File "/Users/Ben/Desktop/flask_practise/oauth.py", line 92, in callback
  86. request_token = session.pop('request_token')
  87. File "/usr/local/lib/python2.7/site-packages/werkzeug/datastructures.py", line 246, in pop
  88. rv = super(UpdateDictMixin, self).pop(key)
  89. KeyError: 'request_token'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement