能够选择链接本地服务器,或者云服务器。html
参考源代码 : https://www.cnblogs.com/wuzhang/p/wuzhang20141202.html前端
/****************************** * 1,新增数据库的操做 * 2,对用户名和密码采用MD5加密技术 * 3,完善登陆和注册的逻辑判断 * @Author wuzhang * 2014/12/4 *****************************/ using UnityEngine; using System.Collections; using UnityEngine.UI; using AssemblyCSharp; using System.Text; using System.Security.Cryptography; using System; using System.Data; using MySql.Data; using MySql.Data.MySqlClient;
public class login : MonoBehaviour { //Toggle public Toggle remPasswd; private Toggle fogPasswd; //注册信息 public InputField inputName; public InputField inputPaswd; //sql全局操做对象 SqlAccess sql = new SqlAccess(); // <-- 另外一个类 void Start() { DataSet ds = sql.SelectAll("user"); sql.ReadDs(ds); } /// 登陆事件 void OnCLick() { //MD5加密 byte[] result = Encoding.Default.GetBytes(inputPaswd.text); //inputPaswd.text为输入密码的文本框 MD5 md5 = new MD5CryptoServiceProvider(); byte[] output = md5.ComputeHash(result); // 加密预备 Debug.Log ("Md5:"+BitConverter.ToString(output));
string Md5Passwd = BitConverter.ToString(output).Replace("-",""); Debug.Log(sql.ExistOrNot("select * from user where name = " + "'"+inputName.text+"'" +"and passwd = '"+Md5Passwd+"'"));
//加密套路
DataSet ds = sql.ExistOrNot("select * from user where name = " + "'"+inputName.text+"'" +"and passwd = '"+Md5Passwd+"'"); Debug.Log ("检索到:"+ds.Tables[0].Rows.Count);
if(ds.Tables[0].Rows.Count > 0) { Application.LoadLevel("test1"); } else { Debug.Log ("登陆失败!"); } }
// Update is called once per frame void Update () { //若是选中记住密码 if(remPasswd.isOn) { //填充数据,在这里仅仅是模拟,若是你们想作的真实,能够写个配置文件 inputPaswd.text = "123456"; # 能够不必 } else { inputPaswd.text = inputPaswd.text; } }
///注册事件
void regist() { //若是能够的或直接将数据写入数据库在这里咱们仅仅模拟下功能就好了 if(inputName.text!=""&&inputPaswd.text!="") { //MD5加密 byte[] result = Encoding.Default.GetBytes(inputPaswd.text); //tbPass为输入密码的文本框 MD5 md5 = new MD5CryptoServiceProvider(); byte[] output = md5.ComputeHash(result); Debug.Log ("Md5:"+BitConverter.ToString(output)); string Md5Passwd = BitConverter.ToString(output).Replace("-",""); //tbMd5pass为输出加密文本的文本框
Debug.Log(Md5Passwd); // 加密套路
Debug.Log(sql.ExistOrNot("select * from user where name = " + "'"+inputName.text+"'" +"and passwd = '"+Md5Passwd+"'")); DataSet ds = sql.ExistOrNot("select * from user where name = " + "'"+inputName.text+"'" +"and passwd = '"+Md5Passwd+"'"); Debug.Log ("检索到:"+ds.Tables[0].Rows.Count);
if(ds.Tables[0].Rows.Count > 0) { Debug.Log ("该用户已存在,请从新输入!"); } else { sql.InsertInto("user",new string[]{"name","passwd"},new string[]{inputName.text,Md5Passwd}); //关键值加密32位 string keyStr = "11234567890123456789012345678901"; Debug.Log("注册成功"); Encryption encrytion = new Encryption(); string encryptionName = encrytion.encryptionContent(inputName.text,keyStr); Debug.Log ("Name After Encryption:"+encryptionName); Debug.Log ("Name After DeEncryption:"+encrytion.decipheringContent(encryptionName,keyStr)); string encryptionPasswd = encrytion.encryptionContent(inputPaswd.text,keyStr); Debug.Log ("Passwd After Encryption:"+encryptionPasswd); Debug.Log ("Passwd After DeEncryption:"+encrytion.decipheringContent(encryptionPasswd,keyStr)); } } else { Debug.Log ("请输入注册信息"); } } }
/****************************** * 对数据库操做的封装 * @Author wuzhang * 2014/12/4 *****************************/ using UnityEngine; using System; using System.Data; using System.Collections; using MySql.Data.MySqlClient; using MySql.Data; using System.IO;
public class SqlAccess { public static MySqlConnection dbConnection; //若是只是在本地的话,写localhost就能够。 // static string host = "localhost"; //若是是局域网,那么写上本机的局域网IP static string host = "127.0.0.1"; static string id = "root"; static string pwd = ""; static string database = "login"; public SqlAccess() { OpenSql(); // <-- 连接数据库 } public static void OpenSql() { try { string connectionString = string.Format("Server = {0};port={4};Database = {1}; User ID = {2}; Password = {3};",host,database,id,pwd,"3306"); dbConnection = new MySqlConnection(connectionString); dbConnection.Open(); } catch (Exception e) { throw new Exception("服务器链接失败,请从新检查是否打开MySql服务。" + e.Message.ToString()); } }
// useless... public DataSet CreateTable (string name, string[] col, string[] colType) { if (col.Length != colType.Length) { throw new Exception ("columns.Length != colType.Length"); }
string query = "CREATE TABLE " + name + " (" + col[0] + " " + colType[0]; for (int i = 1; i < col.Length; ++i) { query += ", " + col[i] + " " + colType[i]; } query += ")";
return ExecuteQuery(query); }
// useless... public DataSet CreateTableAutoID (string name, string[] col, string[] colType) { if (col.Length != colType.Length) { throw new Exception ("columns.Length != colType.Length"); } string query = "CREATE TABLE " + name + " (" + col[0] + " " + colType[0] + " NOT NULL AUTO_INCREMENT"; for (int i = 1; i < col.Length; ++i) { query += ", " + col[i] + " " + colType[i]; } query += ", PRIMARY KEY ("+ col[0] +")" + ")"; Debug.Log(query); return ExecuteQuery(query); } //插入一条数据,包括全部,不适用自动累加ID。 public DataSet InsertInto (string tableName, string[] values) { string query = "INSERT INTO " + tableName + " VALUES (" + "'"+ values[0]+ "'"; for (int i = 1; i < values.Length; ++i) { query += ", " + "'"+values[i]+ "'"; } query += ")"; Debug.Log(query); return ExecuteQuery (query); } //插入部分ID public DataSet InsertInto (string tableName, string[] col,string[] values) { if (col.Length != values.Length) { throw new Exception ("columns.Length != colType.Length"); } string query = "INSERT INTO " + tableName + " (" + col[0]; for (int i = 1; i < col.Length; ++i) { query += ", "+col[i]; } query += ") VALUES (" + "'"+ values[0]+ "'"; for (int i = 1; i < values.Length; ++i) { query += ", " + "'"+values[i]+ "'"; } query += ")"; Debug.Log(query); return ExecuteQuery (query); } /// <summary> /// 返回表的查询结果 /// </summary> /// <returns>The all.</returns> /// <param name="Name">Name.</param> public DataSet SelectAll(string Name) { string query ="select * from "+" "+Name; return ExecuteQuery (query); } /// <summary> /// 条件查找 /// </summary> /// <returns>The where.</returns> /// <param name="tableName">Table name.</param> /// <param name="items">Items.</param> /// <param name="col">Col.</param> /// <param name="operation">Operation.</param> /// <param name="values">Values.</param> public DataSet SelectWhere (string tableName, string[] items, string[] col, string[] operation, string[] values) { if (col.Length != operation.Length || operation.Length != values.Length) { throw new Exception ("col.Length != operation.Length != values.Length"); } string query = "SELECT " + items[0]; for (int i = 1; i < items.Length; ++i) { query += ", " + items[i]; } query += " FROM " + tableName + " WHERE " + col[0] + operation[0] + "'" + values[0] + "' "; for (int i = 1; i < col.Length; ++i) { query += " AND " + col[i] + operation[i] + "'" + values[0] + "' "; } return ExecuteQuery (query); } /// <summary> /// 更新表信息 /// </summary> /// <returns>The into.</returns> /// <param name="tableName">Table name.</param> /// <param name="cols">Cols.</param> /// <param name="colsvalues">Colsvalues.</param> /// <param name="selectkey">Selectkey.</param> /// <param name="selectvalue">Selectvalue.</param> public DataSet UpdateInto (string tableName, string []cols,string []colsvalues,string selectkey,string selectvalue) { string query = "UPDATE "+tableName+" SET "+cols[0]+" = "+colsvalues[0]; for (int i = 1; i < colsvalues.Length; ++i) { query += ", " +cols[i]+" ="+ colsvalues[i]; } query += " WHERE "+selectkey+" = "+selectvalue+" "; return ExecuteQuery (query); } /// <summary> /// 条件删除 /// </summary> /// <param name="tableName">Table name.</param> /// <param name="cols">Cols.</param> /// <param name="colsvalues">Colsvalues.</param> public DataSet Delete(string tableName,string []cols,string []colsvalues) { string query = "DELETE FROM "+tableName + " WHERE " +cols[0] +" = " + colsvalues[0]; for (int i = 1; i < colsvalues.Length; ++i) { query += " or " +cols[i]+" = "+ colsvalues[i]; } Debug.Log(query); return ExecuteQuery (query); } /// <summary> /// 关闭数据库 /// </summary> public void Close() { if(dbConnection != null) { dbConnection.Close(); dbConnection.Dispose(); dbConnection = null; } } public DataSet ExistOrNot(string sql) { if(dbConnection.State==ConnectionState.Open) { Debug.Log (sql); DataSet ds = new DataSet(); //表的集合 try { MySqlDataAdapter da = new MySqlDataAdapter(sql, dbConnection); da.Fill(ds); } catch (Exception ee) { throw new Exception("SQL:" + sql + "/n" + ee.Message.ToString()); } finally { } return ds; } return null; } /// <summary> /// 返回检索结果 /// </summary> /// <returns>The query.</returns> /// <param name="sqlString">Sql string.</param> public static DataSet ExecuteQuery(string sqlString) { if(dbConnection.State==ConnectionState.Open) { DataSet ds = new DataSet(); //表的集合 try { MySqlDataAdapter da = new MySqlDataAdapter(sqlString, dbConnection); da.Fill(ds); } catch (Exception ee) { throw new Exception("SQL:" + sqlString + "/n" + ee.Message.ToString()); } finally { } return ds; } return null; } /// <summary> /// 读取数据集 /// </summary> /// <param name="ds">Ds.</param> public void ReadDs(DataSet ds) { if(ds!=null) { DataTable user = ds.Tables[0]; foreach(DataRow row in user.Rows) { foreach(DataColumn colum in user.Columns) { Debug.Log (row[colum]); } } } } }
Ref: Amazon Cognitoreact
经过Cognito 用户池或SAML社交身份提供商进行登陆。git
From: 利用AWS云构建您的下一款Unity 3D游戏,原文连接github
一个难题:移动开发者每每须要容许用户以无缝化方式在不一样设备之间往来迁移(包括智能手机、平板设备以及游戏主机等),并在无需实施应用程序总体更新的前提下对游戏自己的外观与逻辑进行调整。sql
有鉴于此,AWS Mobile Development团队近来推出了其AWS Mobile SDK for Unity的开发者预览版。数据库
你们如今能够将AWS服务与Unity相结合以构建起跨平台应用程序。api
该SDK当中包含对Amazon Cognito、Amazon DynamoDB以及Amazon S3的支持能力。安全
AWS Mobile SDK for Unity可以与Unity 4.0及其更早版本相兼容,同时支持免费与高级两套版本。服务器
1)
你们还能够利用Amazon Cognito以安全方式访问本身的AWS资源,同时在不一样设备之间实现应用程序内容的保存与同步。
DynamoDB是一款灵活性出色的NoSQL数据库,可以在任意负载规模下提供出色的一致性与10毫秒之内之延迟水平。
DynamoDB帮助你们将游戏所需之数据加以保存,并在不一样用户之间进行分享——例如积分排行榜以及共享资产清单。
3)
不过DynamoDB并非咱们的唯一选择。当咱们的游戏依赖于规模庞大且使用频率极高的变动资产时,也能够利用Amazon S3将这些文件保存在云环境当中,然后在游戏运行时从新进行数据获取。
这种方式可以帮助你们对游戏中的资产进行更新,同时又无需经过应用程序商店发布完整的更新内容。
Ref: AWS Mobile SDK for Unity Documentation
1. aws提供了不少服务:
AWS 文档 计算 Amazon EC2 Amazon Elastic Container Registry Amazon Elastic Container Service Amazon Lightsail Amazon VPC AWS Batch AWS Elastic Beanstalk AWS Lambda AWS Serverless Application Repository 存储 Amazon S3 Amazon EBS Amazon EFS Amazon Glacier AWS Snowball AWS Storage Gateway 数据库 Amazon RDS Amazon DynamoDB Amazon ElastiCache Amazon Redshift Amazon Neptune 迁移 AWS Application Discovery Service AWS Database Migration Service AWS Import/Export AWS Migration Hub AWS Server Migration Service AWS Schema Conversion Tool AWS Snowball 网络和内容分发 Amazon VPC Amazon CloudFront Amazon Route 53 API Gateway AWS Direct Connect Elastic Load Balancing 开发人员工具 AWS CodeStar AWS CodeCommit AWS CodeBuild AWS CodeDeploy AWS CodePipeline AWS Cloud9 AWS X-Ray AWS 工具和开发工具包 管理工具 Amazon CloudWatch AWS Auto Scaling AWS CloudFormation AWS CloudTrail AWS Config AWS OpsWorks AWS Service Catalog AWS Systems Manager Trusted Advisor AWS Health AWS 管理控制台 AWS 命令行界面 AWS Tools for Windows PowerShell 媒体服务 Amazon Elastic Transcoder AWS Elemental MediaConvert AWS Elemental MediaLive AWS Elemental MediaPackage AWS Elemental MediaStore AWS Elemental MediaTailor 机器学习 Amazon Sagemaker Amazon Comprehend AWS Deep Learning AMI Amazon Lex Amazon Polly Amazon Rekognition Amazon Machine Learning AWS 上的 Apache MXnet Amazon Translate Amazon Transcribe AWS DeepLens 分析 Amazon Athena Amazon CloudSearch AWS Data Pipeline Amazon Elasticsearch Service Amazon EMR AWS Glue Amazon Kinesis Amazon QuickSight Amazon Redshift 安全性、身份与合规性 Identity & Access Management AWS Artifact AWS Certificate Manager AWS CloudHSM Amazon Cognito AWS Directory Service Amazon GuardDuty Amazon Inspector AWS KMS Amazon Macie AWS Organizations AWS Shield AWS Single Sign-On AWS WAF 移动服务 AWS AppSync (预览版) AWS Mobile Hub AWS Device Farm Amazon Mobile Analytics Amazon Pinpoint 适用于 Android 的 AWS 移动软件开发工具包 适用于 iOS 的 AWS 移动软件开发工具包 适用于 Unity 的 AWS 移动软件开发工具包 适用于 Xamarin 的 AWS 移动软件开发工具包 Amazon SNS AR 和 VR Amazon Sumerian (预览) 应用程序集成 AWS Step Functions Amazon SWF Amazon SQS Amazon SNS Amazon MQ 客户互动 Amazon Connect Amazon SES 企业生产力 Alexa for Business Amazon Chime Amazon WorkDocs Amazon WorkMail 桌面和应用程序流式处理 Amazon WorkSpaces Amazon WAM Amazon AppStream 2.0 物联网 AWS IoT Core Amazon FreeRTOS AWS Greengrass AWS IoT Device Management 游戏开发 Amazon Lumberyard (beta) Amazon GameLift 开发工具包和工具箱 适用于 C++ 的 AWS 开发工具包 适用于 Go 的 AWS 开发工具包 适用于 Java 的 AWS 开发工具包 适用于 JavaScript 的 AWS 开发工具包 适用于 .NET 的 AWS 开发工具包 适用于 PHP 的 AWS 开发工具包 适用于 Python 的 AWS 开发工具包 (Boto3) 适用于 Ruby 的 AWS 开发工具包 AWS Toolkit for Eclipse AWS Toolkit for Visual Studio 适用于 Visual Studio Team Services 的 AWS 工具 其余软件和服务 AWS 帐单和成本管理 AWS Marketplace AWS Support Alexa Top Sites Alexa Web Information Service Amazon Silk AWS GovCloud(美国) 通常引用 区域和终端节点 安全证书 ARN 与服务命名空间 服务限制 AWS 词汇表 AWS 管理控制台 资源组 标签编辑器 资源组标记 API 资源 AWS 快速入门 AWS 白皮书 AWS 培训和认证 AWS 案例研究 关于 Kindle 的 AWS 文档 AWS 文档存档
2. 关于对前端(移动端提供的服务):
3. 使用 Amazon Cognito Identity,
4. Amazon Cognito 开发人员指南 (细节) --> Go to link.
让您轻松地为移动和 Web 应用程序添加用户注册信息和登陆信息,并管理相关权限。
多重验证 (MFA) 经过增长身份验证方法而不是单靠用户名 (或别名) 和密码来提升应用程序的安全性。
找密码用。
【理解为具备某种权限的临时用户】
IAM 角色 相似于用户,由于它是一个 AWS 实体,该实体具备肯定其在 AWS 中可执行和不可执行的操做的权限策略。
可是,角色旨在让须要它的任何人代入,而不是惟一地与某我的员关联。
此外,角色没有关联的标准长期凭证 (密码或访问密钥)。相反,若是用户担任某个角色,则会动态建立临时安全凭证并为用户提供该凭证。 // <----
您可使用角色向一般无权访问您的 AWS 资源的用户、应用程序或服务提供访问权限。【像极了Linux权限管理】
例如,您可能须要向您 AWS 帐户中的用户授予对他们一般不拥有的资源的访问权限,
或是向一个 AWS 帐户的用户授予对另外一个帐户中的资源的访问权限。
或者,您可能须要容许移动应用程序使用 AWS 资源,可是不但愿将 AWS 密钥嵌入在应用程序中 (在其中难以轮换密钥,并且用户可能提取它们)。
有时,您须要向已经具备在 AWS 外部 (例如,在您的公司目录中) 定义的身份的用户提供对 AWS 的访问权限。或者,您可能须要向第三方授予对您帐户的访问权限,使他们能够对您的资源执行审核。
对于这些状况,可以使用 IAM 角色委托对 AWS 资源的访问权限。本节介绍各类角色和它们的不一样使用方式,什么时候及如何选择方法,如何建立、管理、切换到 (或担任) 和删除角色。
注意:若是配置了 SMS 角色,则不能禁用 MFA!
您可使用 AWS Lambda 函数进行高级自定义设置。
若是您要自定义工做流和用户体验,可选择 AWS Lambda 函数来触发不一样的事件。
导入对应的unitypackage。
可见,aws提供了一种更加便捷的方式,将用户管理单独采起aws的方案。
统一在一篇文章。
上接:[Unity3D] Access to DB or AWS
一些问题:Cognito User Pool vs Identity Pool
视频教学:Weekend Hacks: Playing around with AWS Unity SDK; aws-sdk-unity-samples
实践教学:AWS Cognito Sync in Unity
博客教学:Sign Up and Confirm With Amazon Cognito User Pools Using C#
示例代码:awslabs/aws-cognito-dot-net-desktop-app; Code Walkthrough-DotNet
接口文档:AWS SDK for .NET Version 3 API Reference
Download project: ChessGame
ChessGameScenes中放入:CognitoSyncManagerSample.unity
ChessGameScripts中放入:CognitoSyncManagerSample.cs
Create new identity pool.
Sign in to the Amazon Cognito console, choose Manage Federated Identities, and then choose Create new identity pool.