如何在Gramex中实现登录后按用户域名重定向至不同页面?
实现按用户域名登录后重定向的Gramex配置方案
完全可以在gramex.yaml的登录端点中配置实现按用户所属域名重定向的需求,以下是两种可行的实现方式:
方法一:利用模板表达式动态设置重定向地址
通过redirect参数结合Gramex模板语法,直接根据用户的hd字段(邮箱域名)匹配目标页面:
login: pattern: /$YAMLURL/login handler: DBAuth kwargs: auth: membership: hd: [domain1.com, domain2.com, domain3.com] # 模板表达式根据hd字段动态生成重定向地址 redirect: >- {% if user.hd == 'domain1.com' %}index.html {% elif user.hd == 'domain2.com' %}index2.html {% elif user.hd == 'domain3.com' %}index3.html {% else %}default.html{% endif %}
方法二:通过post_login钩子函数处理重定向
如果需要更复杂的逻辑(比如从数据库读取映射关系),可以定义自定义函数作为post_login钩子,在登录完成后执行重定向逻辑:
1. 在gramex.yaml中配置钩子
login: pattern: /$YAMLURL/login handler: DBAuth kwargs: auth: membership: hd: [domain1.com, domain2.com, domain3.com] post_login: mymodule.redirect_by_domain
2. 在同级目录的mymodule.py中编写钩子函数
import gramex def redirect_by_domain(handler, user): # 定义域名与页面的映射关系 domain_map = { 'domain1.com': 'index.html', 'domain2.com': 'index2.html', 'domain3.com': 'index3.html' } # 获取用户域名,默认跳转到default.html target_page = domain_map.get(user.get('hd'), 'default.html') # 构造完整重定向URL并跳转 handler.redirect(handler.get_url(target_page))
两种方法都能实现需求:方法一更适合简单的固定映射,配置简洁;方法二更灵活,可扩展复杂业务逻辑。
内容的提问来源于stack exchange,提问作者Lahari
相关产品推荐
相关产品推荐

