Skip to content

Commit a51a3ba

Browse files
added flask-login to sessions example
1 parent ece1623 commit a51a3ba

3 files changed

Lines changed: 114 additions & 15 deletions

File tree

example/requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
Flask==0.12.2
2+
Flask-Login==0.4.0
23
Flask-Session==0.3.1
34
Flask_SocketIO
45
itsdangerous==0.24

example/sessions.py

Lines changed: 43 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,70 @@
11
from flask import Flask, render_template, session, request, jsonify
2+
from flask_login import LoginManager, UserMixin, current_user, login_user, \
3+
logout_user
24
from flask_session import Session
35
from flask_socketio import SocketIO, emit
46

57
app = Flask(__name__)
68
app.config['SECRET_KEY'] = 'top-secret!'
79
app.config['SESSION_TYPE'] = 'filesystem'
10+
login = LoginManager(app)
811
Session(app)
912
socketio = SocketIO(app, manage_session=False)
1013

1114

15+
class User(UserMixin, object):
16+
def __init__(self, id=None):
17+
self.id = id
18+
19+
20+
@login.user_loader
21+
def load_user(id):
22+
return User(id)
23+
24+
1225
@app.route('/')
1326
def index():
14-
session['value'] = ''
1527
return render_template('sessions.html')
1628

1729

1830
@app.route('/session', methods=['GET', 'POST'])
1931
def session_access():
2032
if request.method == 'GET':
21-
return jsonify({'session': session['value']})
22-
session['value'] = request.get_json().get('session')
33+
return jsonify({
34+
'session': session.get('value', ''),
35+
'user': current_user.id
36+
if current_user.is_authenticated else 'anonymous'
37+
})
38+
data = request.get_json()
39+
if 'session' in data:
40+
session['value'] = data['session']
41+
elif 'user' in data:
42+
if data['user']:
43+
login_user(User(data['user']))
44+
else:
45+
logout_user()
2346
return '', 204
2447

2548

2649
@socketio.on('get-session')
2750
def get_session():
28-
emit('refresh-session', session['value'])
51+
emit('refresh-session', {
52+
'session': session.get('value', ''),
53+
'user': current_user.id
54+
if current_user.is_authenticated else 'anonymous'
55+
})
2956

3057

3158
@socketio.on('set-session')
32-
def set_session(value):
33-
session['value'] = value
59+
def set_session(data):
60+
if 'session' in data:
61+
session['value'] = data['session']
62+
elif 'user' in data:
63+
if data['user'] is not None:
64+
login_user(User(data['user']))
65+
else:
66+
logout_user()
67+
68+
69+
if __name__ == '__main__':
70+
socketio.run(app)

example/templates/sessions.html

Lines changed: 70 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,48 @@ <h1>Flask-SocketIO Sessions example</h1>
1313

1414
<div class="pure-form">
1515
<h2>HTTP</h2>
16-
<p>Current session: <b><span id="http-session"></span></b></p>
17-
<p>Set session to: <input type=text id='http-session-set'> <button class="pure-button pure-button-primary" id="submit-http">Submit</button></p>
18-
16+
<div class="pure-g">
17+
<div class="pure-u-1-6"><h3>Session</h3></div>
18+
<div class="pure-u-5-6">
19+
<p>Current session: <b><span id="http-session"></span></b></p>
20+
<p>
21+
<input type=text id='http-session-set' placeholder="Set session to...">
22+
<button class="pure-button pure-button-primary" id="submit-http">Submit</button>
23+
</p>
24+
</div>
25+
<div class="pure-u-1-6"><h3>User</h3></div>
26+
<div class="pure-u-5-6">
27+
<p>Current user: <b><span id="http-user"></span></b></p>
28+
<p>
29+
<input type=text id='http-user-set' placeholder="User to login...">
30+
<button class="pure-button pure-button-primary" id="login-http">Login</button>
31+
<button class="pure-button pure-button-primary" id="logout-http">Logout</button>
32+
</p>
33+
</div>
34+
</div>
35+
<hr>
1936
<h2>Socket.IO</h2>
2037
<p><button class="pure-button pure-button-primary" id="connect">Connect</button></p>
2138
<div id="socketio" style="display: none">
22-
<p>Current session: <b><span id="socketio-session"></span></b></p>
23-
<p>Set session to: <input type=text id='socketio-session-set'> <button class="pure-button pure-button-primary" id="submit-socketio">Submit</button></p>
39+
<div class="pure-g">
40+
<div class="pure-u-1-6"><h3>Session</h3></div>
41+
<div class="pure-u-5-6">
42+
<p>Current session: <b><span id="socketio-session"></span></b></p>
43+
<p>
44+
<input type=text id='socketio-session-set' placeholder="Set session to...">
45+
<button class="pure-button pure-button-primary" id="submit-socketio">Submit</button>
46+
</p>
47+
</div>
48+
<div class="pure-u-1-6"><h3>User</h3></div>
49+
<div class="pure-u-5-6">
50+
<p>Current user: <b><span id="socketio-user"></span></b></p>
51+
<p>
52+
<input type=text id='socketio-user-set' placeholder="User to login...">
53+
<button class="pure-button pure-button-primary" id="login-socketio">Login</button>
54+
<button class="pure-button pure-button-primary" id="logout-socketio">Logout</button>
55+
</p>
56+
</div>
57+
</div>
2458
</div>
2559
</div>
2660
</div>
@@ -35,6 +69,7 @@ <h2>Socket.IO</h2>
3569
url: '/session',
3670
success: function(data) {
3771
$('#http-session').text(data['session']);
72+
$('#http-user').text(data['user']);
3873
}
3974
});
4075
}, 1000);
@@ -47,15 +82,33 @@ <h2>Socket.IO</h2>
4782
contentType: 'application/json'
4883
});
4984
});
85+
$('#login-http').click(function() {
86+
$.ajax({
87+
type: 'POST',
88+
url: '/session',
89+
data: JSON.stringify({user: $('#http-user-set').val()}),
90+
contentType: 'application/json'
91+
});
92+
});
93+
$('#logout-http').click(function() {
94+
$.ajax({
95+
type: 'POST',
96+
url: '/session',
97+
data: JSON.stringify({user: null}),
98+
contentType: 'application/json'
99+
});
100+
});
101+
50102

51103
// Socket.IO handlers
52104
var socket = null;
53105

54106
$('#connect').click(function() {
55107
if (!socket) {
56108
socket = io.connect(location.href);
57-
socket.on('refresh-session', function(value) {
58-
$('#socketio-session').text(value);
109+
socket.on('refresh-session', function(data) {
110+
$('#socketio-session').text(data['session']);
111+
$('#socketio-user').text(data['user']);
59112
});
60113

61114
$('#connect').text('Disconnect');
@@ -64,8 +117,10 @@ <h2>Socket.IO</h2>
64117
else {
65118
socket.disconnect();
66119
socket = null;
67-
$('#connect').text('Connect');
68120
$('#socketio').hide();
121+
$('#connect').text('Connect');
122+
$('#socketio-session').text('');
123+
$('#socketio-user').text('');
69124
}
70125
});
71126

@@ -75,7 +130,13 @@ <h2>Socket.IO</h2>
75130
}, 1000);
76131

77132
$('#submit-socketio').click(function() {
78-
socket.emit('set-session', $('#socketio-session-set').val());
133+
socket.emit('set-session', {session: $('#socketio-session-set').val()});
134+
});
135+
$('#login-socketio').click(function() {
136+
socket.emit('set-session', {user: $('#socketio-user-set').val()});
137+
});
138+
$('#logout-socketio').click(function() {
139+
socket.emit('set-session', {user: null});
79140
});
80141
</script>
81142
</body>

0 commit comments

Comments
 (0)