我的ASP.Net应用程序处理授权角色很好,但当有人到达未经授权的页面时,他会被踢回登录页面而不会发出任何警告。
有没有办法将邮件传递到默认登录页面?或者,有没有办法让授权失败重定向到不是默认登录页面的页面(在第一次需要授权时保留默认页面)?
我认为你们中的一些人误解了我的所作所为。 这是我的login.aspx:
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Web.Security" %>
<script runat="server">
void Logon_Click(object sender, EventArgs e)
{
if (Membership.ValidateUser(Username.Text, Password.Text))
{
FormsAuthentication.RedirectFromLoginPage(Username.Text, false);
}
else
{
Msg.Text = "Your user name or password is incorrect";
}
}
</script>
<html>
<head id="Head1" runat="server">
<title>Login Screen</title>
</head>
<body>
<form id="form1" runat="server">
<div style="text-align:center;">
<h3>You must be logged in to use this application</h3>
<table>
<tr>
<td>
User Name:</td>
<td>
<asp:TextBox ID="Username" runat="server" /></td>
<td>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1"
ControlToValidate="Username"
Display="Dynamic"
ErrorMessage="User Name needs to be filled in"
runat="server" />
</td>
</tr>
<tr>
<td>
Password:</td>
<td>
<asp:TextBox ID="Password" TextMode="Password"
runat="server" />
</td>
<td>
<asp:RequiredFieldValidator ID="RequiredFieldValidator2"
ControlToValidate="Password"
ErrorMessage="Password needs to be filled in"
runat="server" />
</td>
</tr>
</table>
<asp:Button ID="Submit1" OnClick="Logon_Click" Text="Log On"
runat="server" />
<p>
<asp:Label ID="Msg" ForeColor="red" runat="server" />
</p>
</div>
</form>
</body>
</html>
这是“管理员”控制器页面:
namespace MyApp.Controllers
{
public class AdminController : Controller
{
[Authorize(Roles="SuperUser")]
public ActionResult Index()
{
return View();
}
}
}
如果登录的人在系统中但没有SuperUser角色,则返回到登录界面 - 我想要做的是,我希望用户区分出现的登录界面,因为用户尚未登录,屏幕显示,因为用户没有正确的角色。
实际上,我想要为未经授权的用户做的事情是显示一个显示消息的单独屏幕,然后让用户返回到应用程序的主屏幕。
答案 0 :(得分:2)
创建一个派生自AuthorizeAttribute
的类并覆盖该方法:HandleUnauthorizedRequest
using System.Web.Mvc;
using System.Web.UI.WebControls;
namespace MvcAttributes.Infrastructure.customAttributes
{
public class MyAuthorizeAttribute : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext context)
{
// redirect to your Error page
context.Result =new RedirectResult("/UnauthorizedRequest.html");
// if you want to redirect to some action, use:
// new RedirectResult("/UnAuthorizedUsers/ErrorDetails");
}
}
}
并应用MyAuthorizeAttribute
,如下所示:
[MyAuthorizeAttribute]
public class ProductController :Controller
{
答案 1 :(得分:0)
您可以使用ContentResult返回纯字符串:
In MVC, how do I return a string result?
if bAuthorized
{
return Content("Unauthorized.");
}
假设您的函数如下所示:
function isAuthorized() {
$.ajax({
url: '/Home/isAuthorized',
type: "POST",
data: "some data",
success: function (ret) {
$("#displayresult").html(ret);
},
error: function (ret) {
$("#cdisplayresult").text("Something went wrong!");
}
});
}