您好我有一个登录C#webservice和ajax调用,它正在运行但是有问题,我有2个用户类型(管理员和用户)问题是当用户登录时他根据用户重定向到他的页面类型,但当他写一个他可以访问的管理员网址时,我的问题是如何验证用户类型和提供对页面的访问权限,我不知道我的代码是否会有所帮助但是就在这里。
jQuery(验证localStorage状态):
function verifySesion() {
if (localStorage.UsuNombre == null)
document.location.href = "index.html";
else
$('#msj').html('Welcome: ' + localStorage.UsuNombre + '...');
}
jQuery for ajax call:
function validarSesion() {
var usu = $('#Usuario').val();
var pass = $('#Contraseña').val();
if (usu != "" && pass != "") {
$.ajax({
type: 'POST',
url: urlServer + 'ws_alerts.asmx/ValidarSesion',
// Manda por post la variable us y pass
data: '{"usu":"' + usu + '","pass":"' + pass + '"}',
dataType: 'json',
contentType: 'application/json; charset=utf-8',
error: function (jqXHR, text_status, strError) {
},
timeout: 600000,
success: function (data) {
//Se obtiene como resultado el numero 1, 2 o 0
//1: Aprobador 2: Usuario 0: No registrado
var resultado = data.d;
if (resultado == "1") {
localStorage.UsuNombre = usu;
document.location.href = "Alertas.html";
}
else
{
if (resultado == "2")
{
localStorage.UsuNombre = usu;
document.location.href = "Alert.html";
}
else
{
if (resultado == "0")
bootbox.alert("Try again.");
window.login.reset();
}
}
}
});
}
else
alert("Type User/Password please.");
}
C#WebService
public string ValidarSesion(string usu, string pass)
{
conn = new db_alerts();
string resultado = "false";
//1: Admin 2: User
int tipo = 1;
int respuesta = conn.ConsultarScalar("SELECT COUNT(Id) FROM tbl_usuarios WHERE Nombre='" + usu + "' AND Contraseña='" + pass + "' AND Tipo='" + tipo + "'");
if (respuesta == 1)
{
resultado = "1";
}
else
{
tipo = 2;
respuesta = conn.ConsultarScalar("SELECT COUNT(Id) FROM tbl_usuarios WHERE Nombre='" + usu + "' AND Contraseña='" + pass + "' AND Tipo='" + tipo + "'");
if (respuesta == 1)
{
resultado = "2";
}
else
{
//Variable que se enviara al JS
resultado = "0";
}
}
return resultado;
}
我知道也许它很难理解,但登录工作正常!我只是想知道如何验证用户类型,例如:我在我的所有页面中验证localStorage:
<script src="js/login.js"></script>
<script>verifySesion();</script>
也许用户输入另一个函数(verificarType)和if(如果(localStorage.UsuTipe ==&#39; 1&#39; /&#34; Admin&#34;或其他)然后重定向)和其他(警告(&#34;你无法访问这个页面......&#34;)和重定向)
答案 0 :(得分:0)
而不是实现自己的身份验证方案。我使用像ASP身份这样的东西。它将管理您的用户,创建会话等。然后您可以使用
装饰您的api电话[Authorize(role="Admin")]
public string ApiMethod()
{
....
}
(例如,如果您有管理员角色)。
答案 1 :(得分:0)
您基本上要问的是如何为您的网络服务启用会话数据:我想您想要阅读:https://msdn.microsoft.com/en-us/library/aa480509.aspx。
显然你必须在登录和管理员方法之前加上这个:
[System.Web.Services.WebMethod(EnableSession=true)]
该站点提供了VB.NET语法,但我认为上面是正确的C#语法。
一旦您的登录方法被标记为您只需使用HttpContext.Current.Session访问会话对象,即可为刚刚登录的用户添加admin标志。然后在同一个admin-only方法中检查相同的标志方式。
或者您可以执行user1455010建议的内容。我没有意识到这一点。