.net MVC3实现不同的角色用不同的登录页面
标题说得含糊,明确一些,就是如何用.net的窗体验证的机制让不同的角色被导向到不同的登录页面。
我们都知道设置窗体验证的各属性的时候,有一个验证未通过的话跳转到哪个url,可是假如系统中不同角色的登录页面是不同的话,你该如何处理呢?
<authentication mode="Forms"> <forms loginUrl="~/Login" timeout="2880" /> </authentication>
我们这么处理,不同的登录页面的路径字符串肯定有它自己的特征,把它抽出来用来作判断依据。
我们用一个通用的login页做转向,也就是说,事实上它只是做跳转,而非真实登录。在这个页面里面,我们判断ReturnUrl有什么特征,跟上一步我们总结出来的特征做对比,符合某个特征,就是某种用户,这时候再手动redirect到该类用户需要对应的登录页就可以了,在MVC3下:
// 登录页跳转处理页面 // GET: /Login public RedirectResult Login() { string url = Request["ReturnUrl"]; if (string.IsNullOrEmpty(url)) { return new RedirectResult("/User/Login");//默认用户的登录页面 } else if (url.ToLower().Contains("/jk")) { return new RedirectResult("/jka/Login" + "?ReturnUrl=" + url); } else { return new RedirectResult("/User/Login" + "?ReturnUrl=" + url); } }
这样,只要是没有通过用户验证的,都会带着当前的网址被跳转到本项目的/login页,我们根据当前网址含不含”jk”这个特征来判断是否管理员的路径(这个逻辑完全由你们自己的项目定,可以更严格更科学些)
测试通过