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. from walle.service.code import Code
  15. class PassportAPI(ApiResource):
  16. actions = ['login', 'logout']
  17. def post(self, action):
  18. """
  19. user login
  20. /passport/
  21. :return:
  22. """
  23. if action in self.actions:
  24. self_action = getattr(self, action.lower(), None)
  25. return self_action()
  26. else:
  27. abort(404)
  28. def login(self):
  29. """
  30. user login
  31. /passport/
  32. :return:
  33. """
  34. form = LoginForm(request.form, csrf=False)
  35. if form.validate_on_submit():
  36. user = UserModel.query.filter_by(email=form.email.data).first()
  37. if user is not None and user.verify_password(form.password.data):
  38. login_user(user)
  39. user.fresh_session()
  40. return self.render_json(data=current_user.to_json())
  41. return self.render_json(code=Code.error_pwd, data=form.errors)
  42. def logout(self):
  43. logout_user()
  44. return self.render_json()