passport.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. # -*- coding: utf-8 -*-
  2. """
  3. walle-web
  4. :copyright: © 2015-2017 walle-web.io
  5. :created time: 2017-03-25 11:15:01
  6. :author: wushuiyong@walle-web.io
  7. """
  8. from flask import request, abort, current_app
  9. from flask_login import current_user
  10. from flask_login import login_user, logout_user
  11. from walle.api.api import ApiResource
  12. from walle.form.user import LoginForm
  13. from walle.model.user import UserModel
  14. class PassportAPI(ApiResource):
  15. actions = ['login', 'logout']
  16. def post(self, action):
  17. """
  18. user login
  19. /passport/
  20. :return:
  21. """
  22. if action in self.actions:
  23. self_action = getattr(self, action.lower(), None)
  24. return self_action()
  25. else:
  26. abort(404)
  27. def login(self):
  28. """
  29. user login
  30. /passport/
  31. :return:
  32. """
  33. form = LoginForm(request.form, csrf_enabled=False)
  34. if form.validate_on_submit():
  35. user = UserModel.query.filter_by(email=form.email.data).first()
  36. if user is not None and user.verify_password(form.password.data):
  37. login_user(user)
  38. user.fresh_session()
  39. return self.render_json(data=current_user.to_json())
  40. return self.render_json(code=-1, data=form.errors)
  41. def logout(self):
  42. logout_user()
  43. return self.render_json()