SmartFoxServer学习(4)--登录

前期准备工作前面都已做好, 就不在多说, 直接功能实现了!

SmartFoxServer的登录分Guest LoginCustom Login 两种, 默认为Guset Login

Guset Login

  1. 只需要用户名, 甚至用户名都不需要, 密码就更不需要了, 直接发送LoginRequest 即可, 不做任何验证

  2. 不会触发服务端的USER_LOGIN 事件

Gustom Login

  1. 需要用户名, 需要密码, 验证通过后才算登录成功

  2. 会触发服务端的USER_LOGIN 事件

Custom Login 开启方式

登录后台, 进入 Zone Configurator, 选中要设置的Zone, 双击进入编辑模式, 在General tab页找到Use Custom Login, 将其设置为开启状态.

 

下面是Custom Login实现 

客户端实现

1. 添加监听事件

1 //add events
2 _sfs.AddEventListener(SFSEvent.CONNECTION, onConnection);
3 _sfs.AddEventListener(SFSEvent.CONNECTION_LOST, onConnectionLost);
4
5 _sfs.AddEventListener(SFSEvent.LOGIN, onLogin);
6 _sfs.AddEventListener(SFSEvent.LOGIN_ERROR, onLoginError);

2. 连接成功后发送登录请求

1 ISFSObject paras = SFSObject.NewInstance();
2 paras.PutUtfString("test", "登录参数");
3 // 参数1: 用户名
4 // 参数2: 密码
5 // 参数3: 登入的Zone名称
6 // 参数4: 额外参数
7 IRequest req = new LoginRequest(inputUsername.text, inputPassword.text, "GameZone", paras);
8 _sff.Send(req);

3. 若登录成功会触发LOGIN 的监听方法, 失败则会触发LOGIN_ERROR 的监听方法.

服务端实现

1. 添加USER_LOGIN事件处理类

1 addEventHandler(SFSEventType.USER_LOGIN, OnUserLogin.class);

1 public class OnUserLogin extends BaseServerEventHandler {
2
3     @Override
4     public void handleServerEvent(ISFSEvent event) throws SFSException {
5                 // do something
6     }
7 }

2. 登录验证

 1 @Override
 2 public void execute(ISFSEvent event) throws SFSLoginException {
 3
 4     // 用户名
 5     String username = (String) event.getParameter(SFSEventParam.LOGIN_NAME);
 6     // 密码(密文)
 7     String password = (String) event.getParameter(SFSEventParam.LOGIN_PASSWORD);
 8     // 当前Session
 9     Session session = (Session) event.getParameter(SFSEventParam.SESSION);
10
11     // 密码(明文),与客户端密码进行验证
12     String pwd = "test";
13     if (!getApi().checkSecurePassword(session, pwd, password)) {
14         // 验证失败,抛出登录异常信息
15         throw new SFSLoginException("密码错误!");
16     }else{
17         // 验证通过
18     }
19 }

需要注意的地方

1. 客户端的密码是经过加密后发送的, 非明文!

2. 服务端如果验证失败直接抛出异常即可, SmartFoxServer会自己封装请求返回, 自己不用另外推送消息.

整个登录过程还是挺简单的, 具体流程为, 首先客户端和服务端分别监听自己的登录事件, 当连接成功后客户端发送登录请求, 服务端触发USER_LOGIN事件进行验证, 验证难过客户端触发LOGIN事件, 验证失败抛出SFSLoginException, 客户端触发LOGIN_ERROR事件.

本文版权归作者和博客园共有,来源网址:http://www.cnblogs.com/code-boy/欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。

时间: 2024-08-25 14:56:21

SmartFoxServer学习(4)--登录的相关文章

SmartFoxServer学习(2)--Extension调试

对调试,调试,SmartFoxServer的调试坑了我一天的时间, 你没看错是一天的时间!!! 事情是这样的, 那是一个神清气爽的早上, 我坐在桌子前敲着代码, ... 算了, 还是说正事! 先说下两种调试方法 一.远程调试(扩展程序在SmartFoxServer的环境下运行, 在编辑器里调试) 1. 开启SmartFoxServer的远程调试(准确的说应该是java应用程序的远程调试功能),操作如下 a. 登录SmartFoxServer后台管理, 进入Server Configurator功

ExtJS4.2学习(22)登录界面

现在开始我们来慢慢完善这个系统,今天做一个登录界面,此套系统已经开始慢慢加入Java各种框架,或者后期我会自己定义合适的框架,让它可以完整的跑下来. 今天做的是用window包裹panel,panel再包裹tabpanel实现的:先来看看今天做的效果图: login.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"

Oracle基础学习2--Oracle登录与三种验证机制

首先,Oracle安装完毕有三个默认用户 ?  Sys:数据库对象的拥有者.权限最高.password在安装的时候(口令管理)能够改变 ?  System:数据库管理员,password为manager ?  Scott:一个普通用户,password为tiger 再看连接Oracle的三种验证机制 ?  操作系统验证(具体解释见以下) ?  password文件验证 ?  数据库验证 注:前两者适用于系统用户,比方:Sys.System等:最后一个适用于普通用户.比方:Scott. 再看Ora

IOS-UI基础学习 用户登录界面(-)

本节完成图(丑是丑了点,总归能看的啦)新手笔记,如果啥意见的请提出,一定及时沟通改正. 所包含的控件 UILabel UITextField UIButton 三个基础控件 结构: window - view - view(loginPage 这个打底界面纯粹是为了以后样式预留的) 1 #import <UIKit/UIKit.h> 2 3 @interface LoginPage : UIView 4 { 5 UIButton *btnlogin; //登录按钮 6 UIButton *bt

MySQL学习——mysql登录命令

1.以Windows系统为例,通过cmd命令行登录mysql数据库的命令为: mysql -p(password) -u(username)  -h(service IP) 登录提示: [Warning] Using a password on the command line interface can be insecure. [警告]直接在命令行使用明码密码是不安全的 推荐使用命令mysql -p -u(username) -h(service IP):先不直接输入密码,提示Enter p

SQLSever--基础学习--创建登录用户&amp;创建数据库用户&amp;分配权限

如题,本文简记一下SQL Sever里面登录用户(login)的创建,数据库用户(DBUser)的创建,以及给数据库用户分配权限(Grant). 数据库有三层保护机制: 第一层:登录用户以及登录密码的保护,比如:你拥有进去小区大门的权限: 第二层:数据库的权限,比如:小区有很多楼栋,你只拥有进去指定楼栋的权限: 第三层:数据库操作的权限,比如:你进了指定的楼栋之后,只能做被允许的事情. 第一层里面,用户登录分为windows登录与SQLSever登录,windows登录不说,主要说SQLSeve

python3学习--注册登录小程序

一.需求:#1.实现注册功能输入:username.passowrd,cpassowrd #最多可以输错3次 #3个都不能为空 #用户名长度最少6位, 最长20位,用户名不能重复 #密码长度最少8位,最长15位 #两次输入的密码要一致 #注册成功之后,要写到文件里面#2.登陆功能实现: #3次 用户名和密码你去文件里面取 二.代码 ''' 注册登录小程序 Author:Test_Lin ''' import datetime #先访问文件,将文件中的内容存到列表当中 f = open('Regi

Mysql学习——安装登录

https://dev.mysql.com/downloads/mysql/ 在此链接下下载MySQL并解压到C:\Users\ASUS\Desktop\mysql-8.0.15-winx64 注意:Mysql8.0以上版本没有my.ini这个文件夹(一开始自己看网上的教程找了半天这个文件夹,后来才发现没有......) 计算机→属性→高级系统设置→高级→环境变量->系统变量→寻找 Path 变量→编辑→编辑文本 在变量值最后输入:你的mysql路径\bin我的就是D:\Software\mys

python学习笔记--登录

#!/usr/bin/env python num=1while num < 4:        num = num + 1        user = raw_input("Please you name:")        if user == "lf":                password =raw_input("please pass:")                p = "123456"