允许用户在会话期间切换帐户
Allow user to switch accounts during a session
我有一个正在开发的网络应用程序。用户注册并登录。登录需要用户名和密码。会话以用户名开始。
session['username'] = user.username
目前用户每次会话只有一个帐户。我想允许用户在每个会话中拥有多个帐户。示例:Facebook 允许您在同一会话下拥有个人页面和 public 个人页面(或其他类型的页面)。我想要类似的东西。
为此,我要将会话更改为:
session['email'] = user.email
假设用户名在数据库中没有唯一约束,这应该允许我在同一会话中的用户名之间切换。
没有太多的会话经验,我的问题是:这是正确的方法吗?有没有标准或更好的方法来做到这一点?
根据我上面提供的内容,进一步开发了该应用程序。在您提供电子邮件和密码的意义上,登录类似于 FB。注册时有一个默认用户。
def login():
if request.method == 'POST':
email = request.form.get('email', '')
password = request.form.get('password', '')
dbsession = sessionmaker(bind=get_db())()
error = None
login = dbsession.query(Login).filter(Login.email == email).one_or_none()
login_user, _ = dbsession.query(User, Login).\
filter(
User.email == Login.email,
User.username == email
).one_or_none()
print(login_user)
if login is None or login_user is None:
error = 'Username/Password Combination is invalid.'
else:
if login.check_password(password) is False:
error = 'Username/Password Combination is invalid.'
print(error)
if error is None:
session.clear()
session['email'] = login.email
session['username'] = login_user.email
session['userID'] = login_user.userID
return redirect(url_for('base'))
flash(error)
return render_template('auth/login.html')
创建新用户后,使用下面的 select 用户函数在它们之间切换。
@bp.route('/user/select', methods=('GET',))
def select_user():
session_email = session.get('email', None)
if session_email is not None:
db = get_db()
db_session = sessionmaker(bind=db)()
results = db_session.query(User, Login).\
filter(
User.email == Login.email,
Login.email == session_email
).all()
users = dict(map(lambda x: (x[0].username, x[0]), results))
requested_swap = request.args.get('user', None)
if requested_swap is not None:
if requested_swap in users:
session['username'] = users[requested_swap].username
session['userID'] = users[requested_swap].userID
db_session.close()
return render_template('auth/select_user.html', users=users)
return render_template('auth/select_user.html')
我有一个正在开发的网络应用程序。用户注册并登录。登录需要用户名和密码。会话以用户名开始。
session['username'] = user.username
目前用户每次会话只有一个帐户。我想允许用户在每个会话中拥有多个帐户。示例:Facebook 允许您在同一会话下拥有个人页面和 public 个人页面(或其他类型的页面)。我想要类似的东西。
为此,我要将会话更改为:
session['email'] = user.email
假设用户名在数据库中没有唯一约束,这应该允许我在同一会话中的用户名之间切换。
没有太多的会话经验,我的问题是:这是正确的方法吗?有没有标准或更好的方法来做到这一点?
根据我上面提供的内容,进一步开发了该应用程序。在您提供电子邮件和密码的意义上,登录类似于 FB。注册时有一个默认用户。
def login():
if request.method == 'POST':
email = request.form.get('email', '')
password = request.form.get('password', '')
dbsession = sessionmaker(bind=get_db())()
error = None
login = dbsession.query(Login).filter(Login.email == email).one_or_none()
login_user, _ = dbsession.query(User, Login).\
filter(
User.email == Login.email,
User.username == email
).one_or_none()
print(login_user)
if login is None or login_user is None:
error = 'Username/Password Combination is invalid.'
else:
if login.check_password(password) is False:
error = 'Username/Password Combination is invalid.'
print(error)
if error is None:
session.clear()
session['email'] = login.email
session['username'] = login_user.email
session['userID'] = login_user.userID
return redirect(url_for('base'))
flash(error)
return render_template('auth/login.html')
创建新用户后,使用下面的 select 用户函数在它们之间切换。
@bp.route('/user/select', methods=('GET',))
def select_user():
session_email = session.get('email', None)
if session_email is not None:
db = get_db()
db_session = sessionmaker(bind=db)()
results = db_session.query(User, Login).\
filter(
User.email == Login.email,
Login.email == session_email
).all()
users = dict(map(lambda x: (x[0].username, x[0]), results))
requested_swap = request.args.get('user', None)
if requested_swap is not None:
if requested_swap in users:
session['username'] = users[requested_swap].username
session['userID'] = users[requested_swap].userID
db_session.close()
return render_template('auth/select_user.html', users=users)
return render_template('auth/select_user.html')