zoukankan      html  css  js  c++  java
  • Windows Azure Mobiles Services实现client的登录注冊

    下文仅仅是简单实现,client以Android端的实现为例:

    用户表Account

    package com.microsoft.ecodrive.model;
    
    public class Account {
    	@com.google.gson.annotations.SerializedName("id")
    	public String id;
    	
    	@com.google.gson.annotations.SerializedName("username")
    	public String username;
    	
    	@com.google.gson.annotations.SerializedName("password")
    	public String password;
    	
    	@Override
    	public boolean equals(Object o) {
    		return o instanceof Account && ((Account) o).id == id;
    	}
    }
    

    一、登录

    1、服务端新建api:login,将其script替换例如以下:

    exports.post = function(request, response) {
        // Use "request.service" to access features of your mobile service, e.g.:
        //   var tables = request.service.tables;
        //   var push = request.service.push;
    
        response.send(statusCodes.OK, { message : "post" });
    };
    
    exports.get = function(request, response) {
        var myTable = request.service.tables.getTable('Account');
        myTable.where({
            username: request.param('username'),
            password:request.param('password')
        }).read({
            success: checkPermissions
        });
        function checkPermissions(results) {
            if (results.length <= 0) {
                response.send(statusCodes.BAD_REQUEST, 'No such user.');
            } else {
                response.send(statusCodes.OK, { message : 'sucess.' }); 
            }
        }
    };

    2、client登录代码例如以下:

    private void login(final String name,final String pwd) {
    		List<Pair<String, String>> parameters = new ArrayList<Pair<String, String>>();
    		parameters.add(new Pair<String, String>("username", name));
    		parameters.add(new Pair<String, String>("password", pwd));
    		
    		mClient.invokeApi("login","get", parameters, APIResult.class, new ApiOperationCallback<APIResult>() {
    	        @Override
    	        public void onCompleted(APIResult result, Exception exception, ServiceFilterResponse response) {
    	        	int code = response.getStatus().getStatusCode();
    				Log.i(TAG, "StatusCode:"+code);
    				if (exception == null) {
    					showToast("Login sucess!");
    				} else if (code==400) {
    					showToast("Username or password is wrong, please try again.");
    				}else{
    					showToast(exception.getMessage());
    				}
    	        }
    	    });
    	}
    注:因为是从项目中摘出来的。一些方法须要自己去初始化。

    二、注冊

    方法一:api方式

    1、服务端新建api:register。将其script替换例如以下:

    exports.post = function(request, response) {
        var myTable = request.service.tables.getTable('Account');
        myTable.where({
            username: request.param('username')
        }).read({
            success: checkPermissions
        });
    
        function checkPermissions(results) {
            if (results.length <= 0) {
                var toInsert ={username:request.param('username'),password:request.param('password')};
                myTable.insert(toInsert, {
                    success: function () {
                        response.send(statusCodes.OK, { message : 'Register sucess!'});
                    }
                });
            } else {
                console.log('User %s Already exist.', request.param('username'));
                response.send(statusCodes.BAD_REQUEST, 'Already exist.');
            }
        }
    };
    
    exports.get = function(request, response) {
        response.send(statusCodes.OK, { message : 'Hello World!' });
    };

    2、client代码例如以下:

    	//use api
    	private void register1(final String name,final String pwd) {
    		List<Pair<String, String>> parameters = new ArrayList<Pair<String, String>>();
    		parameters.add(new Pair<String, String>("username", name));
    		parameters.add(new Pair<String, String>("password", pwd));
    		
    		mClient.invokeApi("register","post", parameters, APIResult.class, new ApiOperationCallback<APIResult>() {
    	        @Override
    	        public void onCompleted(APIResult result, Exception exception, ServiceFilterResponse response) {
    	        	int code = response.getStatus().getStatusCode();
    				Log.i(TAG, "StatusCode:"+code);
    				if (exception == null) {
    					//Sucess
    					showToast(result.message);
    				} else if (code==400) {
    					showToast(response.getContent());
    				}else{
    					showToast(exception.getMessage());
    				}
    	        }
    	    });
    	}

    方法二:改动Accout表的insert的script。


    1、替换Accout表的insert的script例如以下:

    function insert(item, user, request) {
        var permissionsTable = tables.getTable('Account');
    
        permissionsTable.where({
            username: item.username
        }).read({
            success: checkPermissions
        });
    
        function checkPermissions(results) {
            if (results.length <= 0) {
                request.execute();
            } else {
                console.log('User %s Already exist.', item.username);
                request.respond(statusCodes.BAD_REQUEST, 'User already exist');
            }
        }
    }

    2、client代码例如以下:

    //use insert
    	private void register(final String name,final String pwd) {
    		Account account = new Account();
    		account.username = name;
    		account.password = pwd;
    		mAccountTable.insert(account,new TableOperationCallback<Account>() {
    			@Override
    			public void onCompleted(Account result, Exception exception,
    					ServiceFilterResponse response) {
    					int code = response.getStatus().getStatusCode();
    					Log.i(TAG, "StatusCode:"+code);
    					if (exception == null) {
    						//Sucess
    						showToast("Register sucess!");
    					} else if (code==400) {
    						showToast(response.getContent().replace(""", ""));
    					}else{
    						showToast(exception.getMessage());
    					}
    			}
    		});
    	}

    另,APIResult类例如以下:

    package com.microsoft.ecodrive.model;
    
    import com.google.gson.annotations.SerializedName;
    
    public class APIResult {
    	@SerializedName("count")
        public int mCount;
    
        public int getCount() {
    		return mCount;
    	}
    
    	public String message;
    
    }
    


  • 相关阅读:
    Array的个人总结
    sublime3 的安装
    小白 安装和配置Tomcat 局域网内访问网页
    安装Axure7.0,完整教程,有验证码和汉化包
    安装 sublime2 (包括插件)
    ffmpeg
    ExecutorService
    artDialog
    交互
    刚查了,Z3795不支持EPT,即WP8开发必须的SLAT,看来只能作为简单的WINDOWS备机了
  • 原文地址:https://www.cnblogs.com/llguanli/p/6744899.html
Copyright © 2011-2022 走看看