[英]Admin and user Login in 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 而不是計數(計數在登錄的情況下確實沒有用處)。 所以像這樣:
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
。 如果它只是要加載的頁面,則可以返回View
。
我認為您可以從具有授權的模板創建一個 asp.net 核心項目並調查它應該如何完成。 在您的情況下,您可以在控制器方法中使用重定向操作,但這不是一個很好的做法,無論如何請查看此鏈接。
您可以使用RedirectToAction()方法,然后您重定向到的操作可以返回一個視圖。 最簡單的方法是:
return RedirectToAction("Index", model);
如果您不需要返回模型,請清除它
return RedirectToAction("Index");
基本上你想根據他們的角色將訪問者重定向到不同的頁面。 所以對於像“管理員”、“用戶”這樣的分配角色。
之后,當您檢查登錄時獲取角色。
var roles = "Select Role from Users where Username=@Username and Password=@Password";
if(roles == "Admin"){
//redirect to admin view
}
else{
//redirect to user view
}
就 AI 而言,您想要的是我們 MVC 應用程序中基於角色的身份驗證。
您將在注冊用戶時分配角色,當他們登錄時,您將根據其角色打開不同的頁面。
您可以查看以下鏈接以獲取相同信息,這將對您有所幫助。 https://www.c-sharpcorner.com/UploadFile/rahul4_saxena/role-based-access-of-an-mvc-application/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.