c# - MVC 中的管理员和用户登录
问题描述
我想允许用户和登录都通过一个视图,但是当用户登录时,他应该被定向到另一个视图,而当用户登录时,他应该被定向到另一个视图。这是我的数据库:
我进行了简单的注册,但我需要制作一个登录表单,根据用户被引导到视图的角色。
我做了一个登录存储过程:
Create procedure [dbo].[Login]
(
@Username nvarchar (20),
@Password nvarchar (20)
)
as
Begin
Select COUNT(*)from Users where Username=@Username and Password=@Password
End
和 Login.cs 类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
namespace WebApplication19.Models
{
public class Login
{
[Required(ErrorMessage = "Required.")]
public string Username { get; set; }
[Required(ErrorMessage = "Required.")]
public string Password { get; set; }
}
}
和一个 ValidateUser 函数
public bool Validate_User(Login lmodel)
{
connection();
SqlCommand cmd = new SqlCommand("Login");
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@Username", lmodel.Username);
cmd.Parameters.AddWithValue("@Password", lmodel.Password);
cmd.Connection = con;
con.Open();
int i = cmd.ExecuteNonQuery();
con.Close();
if (i >= 1)
return true;
else
return false;
}
}
我不明白如何在我的代码中使用角色。
解决方案
我将尝试提供一种解决方案,保留您现有的结构并仅使用 1 个 DB 调用。
好的,首先,更改您的登录过程以返回 UserRole 而不是 count (在登录的情况下,count 确实没有用处)。所以是这样的:
Create procedure [dbo].[Login]
(
@Username nvarchar (20),
@Password nvarchar (20)
)
as
Begin
Select Role from Users where Username=@Username and Password=@Password
End
接下来,您需要将您的Validate_User
功能...修改为如下内容:
public bool Validate_User(Login lmodel, out string userRole)
{
connection();
SqlCommand cmd = new SqlCommand("Login");
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@Username", lmodel.Username);
cmd.Parameters.AddWithValue("@Password", lmodel.Password);
cmd.Connection = con;
con.Open();
userRole = cmd.ExecuteNonQuery();
con.Close();
return !String.IsNullOrEmpty(userRole);
}
}
至此,您现在有了自己的角色,并且围绕 bool (userIsValid) 的逻辑应该仍然是一致的。您现在只需要调用 Validate_User 并检索用户的角色。这应该看起来像这样:
string role = string.empty;
if (Validate_User(loginModel, out role))
{
if (role == "Admin")
{
return View("AdminView");
}
else
{
return View("UserView");
}
}
else
{
//handle failed login
}
希望这对您有所帮助,没有对此进行测试,但它应该可以正常工作。
请记住,RedirectToAction
如果有更多需要运行的逻辑或需要返回特定于视图的数据,您将需要执行此操作。如果只是要加载的页面,则只需 return View
.
推荐阅读
- node.js - 无法从我的快递服务器 api 获取数据?
- ms-access - 针对共享点的 MS Access fso.FolderExists 很不稳定 - 有没有更好的方法?
- python - (Jupyterlab) Matplotlib 绘图仅在双击绘图图像后显示正确的大小
- excel - 过滤特定值的数据透视表
- vue.js - Vue 路由保护以区分页面重新加载(例如 F5/浏览器单击刷新按钮)和直接粘贴 URL
- python - 如何在 Python 中编写回归方程
- reactjs - 为什么我通过导入 react-chartjs-2 得到运行时错误
- powershell - 如何在 Powershell 中循环 dict(Python)
- node.js - 在 Discord.JS 中没有任何错误消息的情况下无法从用户中删除角色
- ssl - 客户端证书如何在 python 请求模块中工作?