mirror of
https://github.com/wassname/flask-security.git
synced 2026-08-16 11:20:58 +08:00
Refactor login_user and logout_user to be a utility method, thus it can be reused if necessary
This commit is contained in:
+5
-46
@@ -9,12 +9,9 @@
|
||||
:license: MIT, see LICENSE for more details.
|
||||
"""
|
||||
|
||||
from datetime import datetime
|
||||
|
||||
from flask import current_app as app, redirect, request, session, \
|
||||
render_template, jsonify, Blueprint
|
||||
from flask.ext.login import login_user, logout_user
|
||||
from flask.ext.principal import Identity, AnonymousIdentity, identity_changed
|
||||
from flask.ext.principal import AnonymousIdentity, identity_changed
|
||||
from werkzeug.datastructures import MultiDict
|
||||
from werkzeug.local import LocalProxy
|
||||
|
||||
@@ -27,9 +24,8 @@ from flask_security.forms import LoginForm, RegisterForm, ForgotPasswordForm, \
|
||||
from flask_security.recoverable import reset_by_token, \
|
||||
reset_password_reset_token
|
||||
from flask_security.signals import user_registered
|
||||
from flask_security.tokens import generate_authentication_token
|
||||
from flask_security.utils import get_url, get_post_login_redirect, do_flash, \
|
||||
get_remember_token, get_message, config_value
|
||||
get_message, config_value, login_user, logout_user
|
||||
|
||||
|
||||
# Convenient references
|
||||
@@ -40,38 +36,6 @@ _datastore = LocalProxy(lambda: _security.datastore)
|
||||
_logger = LocalProxy(lambda: app.logger)
|
||||
|
||||
|
||||
def _do_login(user, remember=True):
|
||||
"""Performs the login and sends the appropriate signal."""
|
||||
|
||||
if not login_user(user, remember):
|
||||
return False
|
||||
|
||||
if user.authentication_token is None:
|
||||
user.authentication_token = generate_authentication_token(user)
|
||||
|
||||
if remember:
|
||||
user.remember_token = get_remember_token(user.email, user.password)
|
||||
|
||||
if _security.trackable:
|
||||
old_current, new_current = user.current_login_at, datetime.utcnow()
|
||||
user.last_login_at = old_current or new_current
|
||||
user.current_login_at = new_current
|
||||
|
||||
old_current, new_current = user.current_login_ip, request.remote_addr
|
||||
user.last_login_ip = old_current or new_current
|
||||
user.current_login_ip = new_current
|
||||
|
||||
user.login_count = user.login_count + 1 if user.login_count else 0
|
||||
|
||||
_datastore._save_model(user)
|
||||
|
||||
identity_changed.send(app._get_current_object(),
|
||||
identity=Identity(user.id))
|
||||
|
||||
_logger.debug('User %s logged in' % user)
|
||||
return True
|
||||
|
||||
|
||||
def _json_auth_ok(user):
|
||||
return jsonify({
|
||||
"meta": {
|
||||
@@ -107,7 +71,7 @@ def authenticate():
|
||||
try:
|
||||
user = _security.auth_provider.authenticate(form)
|
||||
|
||||
if _do_login(user, remember=form.remember.data):
|
||||
if login_user(user, remember=form.remember.data):
|
||||
if request.json:
|
||||
return _json_auth_ok(user)
|
||||
|
||||
@@ -131,13 +95,8 @@ def authenticate():
|
||||
def logout():
|
||||
"""View function which handles a logout request."""
|
||||
|
||||
for key in ('identity.name', 'identity.auth_type'):
|
||||
session.pop(key, None)
|
||||
|
||||
identity_changed.send(app._get_current_object(),
|
||||
identity=AnonymousIdentity())
|
||||
|
||||
logout_user()
|
||||
|
||||
_logger.debug('User logged out')
|
||||
|
||||
return redirect(request.args.get('next', None) or
|
||||
@@ -163,7 +122,7 @@ def register_user():
|
||||
|
||||
# Login the user if allowed
|
||||
if not _security.confirmable or _security.login_without_confirmation:
|
||||
_do_login(u)
|
||||
login_user(u)
|
||||
|
||||
return redirect(_security.post_register_view or
|
||||
_security.post_login_view)
|
||||
|
||||
Reference in New Issue
Block a user