技术开发 频道

基于ASP.NET AJAX框架实现表单验证编程(理论篇)


一、 简介

    ASP.NET AJAX框架的身份认证服务能够与ASP.NET 2.0的身份认证应用程序服务集成起来,并为其提供客户端的JavaScript调用代理。ASP.NET AJAX客户端部分身份认证代理的相关功能统一由客户端Sys.Services.AuthenticationService类提供。
   Sys.Services.AuthenticationService是一个静态类,定义于MicrosoftAjax.js文件中,通过调用该类中的方法,我们能够间接地使用ASP.NET 2.0内置的MemberShip应用服务来实现用户的身份认证并使用提供的身份认证的相关功能,例如用户登录和注销等。在后台方面,由ASP.NET AJAX框架将负责整个异步通讯的实现细节。通过这种方法,开发者可以沿用ASP.NET 2.0中的标准用户认证系统。
    在本文中,我们将对Sys.Services.AuthenticationService类的公共成员作全面分析,并给出应用注意事项。在下篇中,我们将给出一个具体的应用案例。

二、 AuthenticationService具体成员分析

    首先,让我们使用Eilon Lipton编写的ASP.NET AJAX客户端JavaScript类浏览器来浏览这个类的轮廓信息:

internal class Sys.Services._AuthenticationService : Sys.Net.WebServiceProxy {
// Constructor
public Sys.Services._AuthenticationService();
// Fields
public static Object DefaultWebServicePath;
private static Boolean __class;
private static String __typeName;
private Object _authenticated;
private Object _defaultFailedCallback;
private Object _defaultLoginCompletedCallback;
private Object _defaultLogoutCompletedCallback;
private Object _path;
private Object _timeout;
// Properties
public override Object defaultFailedCallback { get; set; };
public Object defaultLoginCompletedCallback { get; set; };
public Object defaultLogoutCompletedCallback { get; set; };
public Object isLoggedIn { get; };
public override Object path { get; set; };
public override Object timeout { get; set; };
// Methods
private static Object __baseType();
private Object _onLoginComplete(Object result, Object context, Object methodName);
private Object _onLoginFailed(Object err, Object context, Object methodName);
private Object _onLogoutComplete(Object result, Object context, Object methodName);
private Object _onLogoutFailed(Object err, Object context, Object methodName);
private Object _setAuthenticated(Object authenticated);
public Object login(Object username, Object password, Object isPersistent, Object customInfo, Object redirectUrl, Object loginCompletedCallback, Object failedCallback, Object userContext);
public Object logout(Object redirectUrl, Object logoutCompletedCallback, Object failedCallback, Object userContext);
}
    注意,上面把所有私有成员(带下划线的字段与方法)也一并列出。其实,这个AuthenticationService对象仅提供了两个公用方法:login()和logout(),分别用来实现用户登录和注销,还暴露了几个常用的属性。下面让我们逐一介绍。
(一) 方法

1.login()方法

    这个方法负责将用户名字和密码传递到服务器端进行验证,并返回是否通过验证的信息;必要的话,还可以设置相应的客户端Cookie等信息。这个方法的完整形式如下所示:
Sys.Services.AuthenticationService.login(userName, 
password,
isPersistent,
customInfo,
redirectUrl,
loginCompletedCallback,
failedCallback,
userContext);
    下面表格1详细列出了上面各个参数的含义。
   
     表格1—login()方法各个参数的含义


    其中,loginCompletedCallback和failedCallback是两个重要的回调函数地址参数。
    ①loginCompletedCallback参数所指定的回调函数的完整形式:
function onLoginCompleted(validCredentials, userContext, methodName)
 validCredentials:一个布尔值,表示用户是否成功通过了验证;
 userContext:在调用login()方法时传递的用户上下文对象;
 methodName:调用方法的方法名。


② failedCallback参数所指定的回调函数的完整形式如下:
function onAuthenticationFailed(error, userContext, methodName)

 error:导致认证服务失败的异常对象;
 userContext:在调用login()方法时传递的用户上下文对象;
 methodName:调用方法的方法名。

2.logout()方法

     logout()方法用来注销当前已经登录的用户。这个方法的完整形式如下所示:

Sys.Services.AuthenticationService.logout(
redirectUrl,
logoutCompletedCallback,
failedCallback,
userContext
);

    其中各个参数的含义如下表2所示。

    表2. logout()方法各参数含义


    注意,在此所列出的四个参数均是可选的。对于logoutCompletedCallback和failedCallback参数,如果为AuthenticationService对象设置了默认值的话,也可以省略。
    注销成功之后的回调函数,即logoutCompletedCallback参数所指定的函数的完整的形式如下所示:

function onLogoutCompleted(result, userContext, methodName)

    说明:
    1. result:目前并没有使用到该参数,始终为null。
    2. userContext:在调用logout()方法时传递的用户上下文对象。
    3. methodName:调用方法的方法名。


   注销用户失败之后的回调函数,即failedCallback参数所指定的函数形式:
function onAuthenticationFailed(error, userContext, methodName)

    说明:
     1. error:导致认证服务失败的异常对象。
     2. userContext:在调用login()方法时传递的用户上下文对象。
     3. methodName:调用方法的方法名。

(二) 公共属性

    AuthenticationService对象还提供了如表3所示几个经常用到的属性。 
   
    表3 AuthenticationService对象的常用属性


(三) 简单举例

1.设置AuthenticationService对象的timeout属性:

Sys.Services.AuthenticationService.set_timeout(3000);

2.若是预先设定了defaultLoginCompletedCallback、defaultLogoutCompletedCallback和 defaultFailedCallback属性,那么在调用AuthenticationService对象的login()和logout()方法时,则可省去专门指定各回调函数的操作。例如,如下代码就设定了AuthenticationService的这3个属性,并定义了相应的默认回调函数:

Sys.Services.AuthenticationService.set_defaultLoginCompletedCallback(onLoginCompleted); 
Sys.Services.AuthenticationService.set_defaultLogoutCompletedCallback(onLogoutCompleted);
Sys.Services.AuthenticationService.set_defaultFailedCallback(onAuthenticationFailed);
function onLoginCompleted(validCredentials, userContext, methodName) {
//…………
}
function onLogoutCompleted(result, userContext, methodName) {
//…………
}
function onAuthenticationFailed(error, userContext, methodName) {
//…………
}
    随后,我们只需使用如下代码进行用户登录/注销就可以了。其中userName表示用户名,password表示密码:
Sys.Services.AuthenticationService.login(userName, password, true); 
//…………
Sys.Services.AuthenticationService.logout();
    显然,这种编程思路清晰更有助于实现模块化,更值得推荐。


3.下面这个函数调用logout方法简单地清除表单中的认证cookie信息。

function OnClickLogout() { Sys.Services.AuthenticationService.logout(null, null, null, null); }
4.下面这个函数调用认证服务的login方法校验用户输入的证书信息。如果认证成功,认证服务将产生一个表单认证相关cookie。

function OnClickLogin(){ 
//设置默认的回调函数
SetDefaultLoginCompletedCallBack();
SetDefaultLogoutCompletedCallBack();
SetDefaultFailedCallBack();

//调用认证服务认证用户输入的证书信息
Sys.Services.AuthenticationService.login(username.value,
password.value, false,null,null,null,null,"User Context");
}
三、 总结

    在本篇中,我们仅罗列了ASP.NET AJAX框架的客户端认证服务中一些重要的公共成员及含义解释。并且,我们已经认识到进行以ASP.NET AJAX框架客户端中心型Web开发应当主动使用这一功能。在下篇中,我们将给出具体的示例演示。
0
相关文章