Unity 实现使用邮箱登陆注册功能

有一下功能
1、账号密码本地存储
2、支持忘记密码 修改密码
3、通过邮箱验证码 注册
4、注册码有时效限制

这只是个小demo,只注重实现功能
下面是代码

using System;
using System.Collections;
using System.Collections.Generic;
using System.Net;
using System.Net.Mail;
using System.Text.RegularExpressions;
using UnityEditorInternal;
using UnityEngine;
using UnityEngine.UI;
using Random = System.Random;


public class Eamile : MonoBehaviour
{

    //注册界面
    public GameObject Register;
    //注册邮箱的输入框
    public InputField RegisterEamil;
    //验证码的输入框
    public InputField CodeInput;
    //密码输入框
    public InputField Password;
    //发送验证码的按钮
    public Button SendCode;
    //确认注册按钮
    public Button Confirm;
    //返回按钮
    public Button Return;
    
    //登陆界面
    public GameObject Longin;
    //登陆邮箱的输入框
    public InputField LonginEamil;
    //登陆密码的输入框
    public InputField LonginPassWord;
    //登陆按钮
    public Button LonginBut;
    //注册按钮
    public Button RegisterBtu;
    //忘记密码按钮
    public Button ForgotPasswordBut;
    
    
    //验证码
    string a = "0123456789";

    /// 
    /// 随机出来的验证码
    /// 
    private string code;

    /// 
    /// 倒计时
    /// 
    private float time;

  //是否点击了忘记密码
    private bool isForgotPassword;
    /// 
    /// 存储账号
    /// 
    //private Dictionary SaveAccount = new Dictionary();

    // Start is called before the first frame update
    void Start()
    {
        SendCode.onClick.AddListener(SendEamil);
        Confirm.onClick.AddListener(ConfirmOnClick);
        LonginBut.onClick.AddListener(LonginOnClick);
        RegisterBtu.onClick.AddListener(RegisterOnClick);
        ForgotPasswordBut.onClick.AddListener(ForgotPassword);
        Return.onClick.AddListener(ReturnOnClick );

    }

    // Update is called once per frame
    void Update()
    {
        if (time > 0)
        {
            time -= Time.deltaTime;
            if (time <= 0)
            {
                code = "";
                SendCode.enabled = true ;
            }
        }
    }

    /// 
    /// 发送验证码
    /// 
    public void SendEamil()
    {
        
        if (PlayerPrefs .HasKey(RegisterEamil.text)&&!isForgotPassword)
        {
            Debug.Log("账号已注册");
            return;
        }
        try
        {
            //实例化一个随机数
            Random num = new Random();

            for (int i = 0; i < 4; i++)
            {
                code = code + a.Substring(num.Next(0, a.Length), 1);
            }

            Debug.Log("验证码" + code);
            SmtpClient mailClient = new SmtpClient("smtp.qq.com");//使用的是qq邮箱,
            mailClient.EnableSsl = true;
            mailClient.Credentials = new NetworkCredential("邮箱", "邮箱的授权码");//不知道授权码的  自行百度 
            Debug.Log(RegisterEamil.text);
            //发验证码用的邮箱,注册账号的邮箱
            MailMessage message = new MailMessage(new MailAddress("邮箱"), new MailAddress(RegisterEamil.text));
            message.Body = "您的验证码为" + code + ",请在30分钟内验证,系统邮件请勿回复!";
            message.Subject = "验证码";
            mailClient.Credentials = mailClient.Credentials;
           // mailClient.Send(message);
           mailClient.SendCompleted += new SendCompletedEventHandler((sender, arg) =>
           {
               bool isResult = arg.Error == null;
               if (!isResult)
               {
                   //发送失败
                   Debug.LogError(arg.Error);
               }
               else
               {
                   //发送成功
               }
           });
            mailClient.SendAsync(message, null);
            //发送验证码 按钮失效
            SendCode.enabled = false;
            //倒计时  30分钟 1800秒
            time = 1800;
        }
        catch (Exception e)
        {
            Debug.Log("邮箱格式不正确");
        }
    }

    /// 
    /// 判断验证码是否正确
    /// 
    public bool  CodeBool()
    {
        if (code.Equals(CodeInput.text))
        {
            Debug.Log("验证码正确");
            return true;
        }
        else
        {
            Debug.Log("验证码错误");
            return false;
        }
    }


    /// 
    /// 登陆按钮
    /// 
    public void LonginOnClick()
    {
       
        //判断是否有这个邮箱账号
        if (PlayerPrefs .HasKey(LonginEamil.text))
        {
            //判断密码是否正确
            if (PlayerPrefs.GetString( LonginEamil.text).Equals( LonginPassWord.text ))
            {
                Debug.Log($"登陆成功  账号{LonginEamil.text}   密码{PlayerPrefs.GetString(LonginEamil.text)}");
                
            }
            else
            {
                Debug.Log($"邮箱或账号不正确 账号{LonginEamil.text}   密码{PlayerPrefs.GetString(LonginEamil.text)}");
            }
        }
        else
        {
            Debug.Log($"邮箱或账号不正确   账号{LonginEamil.text}   密码{PlayerPrefs.GetString(LonginEamil.text)}");
        }
    }

    /// 
    /// 注册按钮
    /// 
    public void RegisterOnClick()
    {
        Longin.gameObject.SetActive(false);
        Register.gameObject.SetActive(true);
        SendCode.enabled = true ;
        Debug.Log("注册账号'");
        LonginEamil.text = "";
        LonginPassWord.text = "";
        code = "";
    }

    /// 
    /// 忘记密码
    /// 
    public void ForgotPassword()
    {
        RegisterOnClick();
        Debug.Log("忘记密码");
        isForgotPassword = true;
    }

    /// 
    /// 确认按钮
    /// 
    public void ConfirmOnClick()
    {
        //验证码时间超出现在    验证码错误
        if (time <= 0&&!CodeBool())
        {
            Debug.Log("验证码已过期  请重新获取验证码");
            SendCode.enabled = true ;
            return;
        }
        //判断字典是否有这个账号   如果有(说明是要修改密码)  反之注册新的账号
        if (PlayerPrefs .HasKey(RegisterEamil.text))
        {
            //修改密码
            PlayerPrefs.SetString(RegisterEamil.text, Password.text);
            Debug.Log("修改密码成功");
            Debug.Log($"  账号{RegisterEamil.text}   密码{PlayerPrefs.GetString(RegisterEamil.text)}");
        }
        else
        {
                //注册账号
                PlayerPrefs.SetString(RegisterEamil.text, Password.text);
                Debug.Log("注册新账号成功");
                Debug.Log($"  账号{RegisterEamil.text}   密码{PlayerPrefs.GetString(RegisterEamil.text)}");

        }

        ReturnOnClick();
    }

    //返回按钮
    public void ReturnOnClick()
    {
        Longin.gameObject.SetActive(true );
        Register.gameObject.SetActive(false );
        RegisterEamil.text = "";
        Password.text = "";
        CodeInput.text = "";
    }
}

你可能感兴趣的:(Unity小问题,unity,c#)