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;

posted @ 2012-11-29 14:36  xanqi  阅读(505)  评论(0)    收藏  举报