passport.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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. from walle.service.error import WalleError
  16. class PassportAPI(ApiResource):
  17. actions = ['login', 'logout']
  18. def post(self, action):
  19. """
  20. user login
  21. /passport/
  22. :return:
  23. """
  24. if action in self.actions:
  25. self_action = getattr(self, action.lower(), None)
  26. return self_action()
  27. else:
  28. abort(404)
  29. def login(self):
  30. """
  31. user login
  32. /passport/
  33. :return:
  34. """
  35. form = LoginForm(request.form, csrf=False)
  36. if form.validate_on_submit():
  37. user = UserModel.query.filter_by(email=form.email.data).first()
  38. if user is not None and user.verify_password(form.password.data):
  39. try:
  40. remember = False
  41. if current_app.config.get("COOKIE_ENABLE"):
  42. remember = True
  43. current_app.logger.info("remember me(记住我)功能是否开启,{}".format(remember))
  44. login_user(user, remember=remember)
  45. user.fresh_session()
  46. except WalleError as e:
  47. return self.render_json(code=e.code, data=Code.code_msg[e.code])
  48. return self.render_json(data=current_user.to_json())
  49. return self.render_json(code=Code.error_pwd, data=form.errors)
  50. def logout(self):
  51. logout_user()
  52. return self.render_json()