码迷,mamicode.com
首页 > Windows程序 > 详细

Windows Azure Mobiles Services实现client的登录注冊

时间:2017-04-21 19:04:54      阅读:317      评论:0      收藏:0      [点我收藏+]

标签:private   asc   res   opera   result   code   font   ice   方法   

下文仅仅是简单实现,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;

}


Windows Azure Mobiles Services实现client的登录注冊

标签:private   asc   res   opera   result   code   font   ice   方法   

原文地址:http://www.cnblogs.com/llguanli/p/6744899.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!