LoginTokenController.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. using System;
  2. using UnityEngine;
  3. using UnityEngine.Networking;
  4. using System.Collections;
  5. using System.Collections.Generic;
  6. using Unity.VisualScripting;
  7. /* 使用login token进行登录和数据读取保存
  8. * TestDataInjection 是测试用的假数据注入
  9. * LoginTokenCheck 验证login token是否有效,和服务器比对
  10. */
  11. public class LoginTokenController : MonoBehaviour
  12. {
  13. // Start is called once before the first execution of Update after the MonoBehaviour is created
  14. void Start()
  15. {
  16. TestDataInjection();
  17. StartCoroutine(LoginTokenCheck());
  18. }
  19. // Update is called once per frame
  20. //void Update()
  21. //{
  22. //}
  23. // todo 删除。测试假数据注入
  24. void TestDataInjection()
  25. {
  26. PlayerPrefs.SetString("LoginToken", "TestLoginToken");
  27. DateTime now = DateTime.Now;
  28. DateTime oneHourAgo = now.AddHours(-1);
  29. PlayerPrefs.SetString("LoginTokenTime", oneHourAgo.ToString());
  30. }
  31. // LoginToken登录方法
  32. IEnumerator LoginTokenCheck()
  33. {
  34. //yield return null; // 跳过第一帧(可以考虑去掉,数据加载已经移到awake()了。
  35. string UUID = SystemInfo.deviceUniqueIdentifier; // 这里需要考虑这段代码执行在Enviroment Controller之前
  36. string LoginToken = PlayerPrefs.GetString("LoginToken", null);
  37. string LoginTokenTime = PlayerPrefs.GetString("LoginTokenTime", null);
  38. // todo 比较LoginTokenTime 如果超时直接放弃后面代码。比较UUID是否是null如果是直接放弃后面代码
  39. if (LoginToken == null) { yield break; };
  40. if (LoginTokenTime == null) { yield break; };
  41. DateTime tokenTime;
  42. DateTime now = DateTime.Now;
  43. if (DateTime.TryParse(LoginTokenTime, out tokenTime))
  44. {
  45. TimeSpan span = now - tokenTime;
  46. if (span.TotalHours > 7 * 24)
  47. {
  48. yield break;
  49. }
  50. }
  51. else { yield break; }
  52. // 提交POST
  53. string url = "https://" + EnviromentSetting.serverIp + "/api/login/token/";
  54. WWWForm form = new();
  55. form.AddField("login_token", LoginToken);
  56. form.AddField("UUID", UUID);
  57. //List<KeyValuePair<string, string>> fields = form.fields;
  58. using UnityWebRequest request = UnityWebRequest.Post(url, form);
  59. {
  60. yield return request.SendWebRequest();
  61. if (request.result == UnityWebRequest.Result.Success)
  62. {
  63. Debug.Log("POST Success: " + request.downloadHandler.text);
  64. }
  65. else
  66. {
  67. Debug.Log("POST Error: " + request.error);
  68. }
  69. }
  70. }
  71. }