SmartFoxServer 2X 笔记一:login request (转)
这里只大概讲一下使用到的 API 和登录时的一些要点,其他具体的细节还是需要自己看官方文档的。
前端 Flash 使用到的登录请求 API 是:
LoginRequest(userName:String, password:String, zoneName:String, params:ISFSObject = null)
userName 登录用户的名称。
password 登录密码。
zoneName 要登录的打听名称。
params 自定义参数。
这里说一下密码的用法。密码可以是用户自定义的密码,在 Flash 端登录大厅前让用户输入登陆密码,然后将密码以参数的形式发送到服务器端,由服务器端进行认证。密码也可以是 Flash 和服务器端共同定义好的一个公共密码,在 Flash 发出登录请求的时候,不需要用户输入登录密码,而是将之前定义好的统一的密码发送到服务器端,由服务器端统一进行登录认证。
服务器端的登录认证也是由特定的 API 负责的,这里简单的实例一下服务器端针对登录认证的处理代码片段。
public class LoginEventHandler extends BaseServerEventHandler {
@Override
public void handleServerEvent(ISFSEvent evt) throws SFSException {
//取得登录用户名称 userName
String userName = (String) evt.getParameter(SFSEventParam.LOGIN_NAME);
//取得登录密码 password
String password = (String) evt.getParameter(SFSEventParam.LOGIN_PASSWORD);
//取得 Session
ISession session = (ISession) evt.getParameter(SFSEventParam.SESSION);
//取得登录请求响应数据
ISFSObject response = (ISFSObject) evt.getParameter(SFSEventParam.LOGIN_OUT_DATA);
//进行登录认证
if ( true == getApi().checkSecurePassword(session, "密码", password ) {
//将要返回给前端的数据装入
response.putBoolean( "success", true );
}else{
//抛出登录错误的异常
response.putBoolean( "success", false );
throw new SFSLoginException("passwd is not match");
}
这里需要说明的有三点。第一,通过 checkSecurePassword 进行登录认证时,第二个参数所填写的密码应与 Flash 传入的密码是一致的,在 Flash 调用 LoginRequest 时,第二个参数 password 加密后传给服务器端,所以服务器端得到的 password 是加密过的密码。
第二,登录成功后不需要向 Flash 发送数据,而是将要提供给 Flash 的数据都存入 response 变量,及 SFS 提供的 LOGIN_OUT_DATA,将所需的数据全部存入后,SFS 会自动返回这个对象给 Flash 端。
第三,当登录失败时,抛出 SFSLoginException 异常,SFS 也会自动将异常响应给 Flash 端,不需要单独向 Flash 端 Send 数据。
最后补充一下,Flash 端在响应登录成功回调的时候,从回调响应函数参数 evt:SFSEvent 中,由服务器端传递过来的数据都存在 data 节点,得到服务器端的数据方法是:
evt.params.data.success;

浙公网安备 33010602011771号