用户管理

## 用户管理 ### 参考文档 https://firebase.flutter.dev/docs/overview/ https://firebaseopensource.com/projects/firebaseextended/flutterfire/ https://github.com/FirebaseExtended/flutterfire https://firebase.google.com/docs/auth ### 1. 接口列表 |接口功能|请求方式|API| |-|-|-| |监听用户认证/登录状态|Firebase Auth|![image.png](https://cos.easydoc.net/21942958/files/kejvb2ni.png)<br>详细参考: https://firebase.flutter.dev/docs/auth/usage| |邮箱账号用户创建|Firebase Auth|接口: ```FirebaseAuth.instance.createUserWithEmailAndPassword(email, password)```<br>详细参考: https://firebase.flutter.dev/docs/auth/usage| |邮箱密码方式登录|Firebase Auth|-1. 先监听用户认证状态<br>-2. 发起登录<br>```FirebaseAuth.instance.signInWithEmailAndPassword(email, password)```<br>详细参考: https://firebase.flutter.dev/docs/auth/usage| |用户登出|Firebase Auth|```FirebaseAuth.instance.currentUser.signOut()```<br>详细参考: https://firebase.flutter.dev/docs/auth/usage| |用户注销|Firebase Auth|```FirebaseAuth.instance.currentUser.delete()```<br>详细参考: https://firebase.flutter.dev/docs/auth/usage| |[发送邮件验证码](#1)|HTTP|详细参考下面 【发送邮箱验证码】| |[校验邮件验证码](#2)|HTTP|详细参考下面 【校验邮箱验证码】| |手机验证码方式登录/注册|Firebase Auth|接口:```FirebaseAuth.instance.verifyPhoneNumber()```<br>详细参考: https://firebase.flutter.dev/docs/auth/phone| |更新用户信息|Firebase Auth|```mAuth.getCurrentUser().updateProfile(profileUpdates)```| |更新用户邮箱|Firebase Auth|```mAuth.getCurrentUser().updateEmail("user@example.com")```<br>更改前,需要对用户进行重新身份验证| |更新用户密码|Firebase Auth|```mAuth.getCurrentUser().updatePassword(newPassword)```<br>更改前,需要对用户进行重新身份验证| |用户登录状态|Firebase Auth|```user = FirebaseAuth.instance.currentUser```<br>```user is null表示没有登录```<br>| |对用户重新进行身份验证|Firebase Auth|```EmailAuthCredential credential = EmailAuthProvider.credential(email, password)```<br>```FirebaseAuth.instance.currentUser.reauthenticateWithCredential(credential)```| |获取 经过Google授权登录 的 UserCredential|Firebase Auth|![image.png](https://cos.easydoc.net/21942958/files/kejwgeup.png)| |[获取用户信息](#3)|Firestore|FirebaseFirestore.instance.collection("users").document('<user_id>').get()| |[更新用户注册国家](#4)|HTTP|update_user_country| |[更新用户昵称](#5)|HTTP|update_user_nickname| |[重置用户密码](#6)|HTTP|update_user_password| |[更新用户头像](#7)|HTTP|update_user_avatarurl| <span id="1"></span> ### 发送邮箱验证码 -1. URL ```{base_url}/send_email_code``` -2. HTTP Method ```POST``` -3. Body Para ```email_address: 邮箱地址``` -4. 返回格式 ``` { "code": 200, "data": { "code_id": <code_id_string> }, "message": "SendEmailCodeFailed" } code: 200 表示成功,其他表示错误,请参考message字段查看错误内容 data: 返回数据,code_id表示验证码的ID,用于检验验证码 时使用 message: 消息描述 ``` >d 目前测试阶段,邮箱验证码都是123456,不会真实发送到邮箱。 <span id="2"></span> ### 校验邮箱验证码 -1. URL ```{base_url}/verify_email_code``` -2. HTTP Method ```POST``` -3. Body Para ``` code_id: 验证码ID,发送邮箱验证码时,返回的code_id code: 验证码,邮箱收到的验证码 ``` -4. 返回格式 ``` { "code": 200, "data": None, "message": "Success" } code: 200 表示成功,其他表示错误,请参考message字段查看错误内容 data: None message: 消息描述 ``` <span id="3"></span> ### 获取用户信息 - Firestore 接口直接获取数据 ``` user_data = db.collection("users").document('<user_id>').get() user_data = user_data.to_dict() ``` - 用户数据格式 |字段|类型|说明| |-|-|-| |nick_name|string|用户昵称| |avatar_url|string|用户头像url| |current_house|Object|用户当前所在house信息| |country|Object|region object| |ezivz_account|Object|用户的萤石账号信息| |tuya_account|Object|用户的涂鸦账号信息| |wulian_account|Object|用户的账号信息| region object 相关字段说明: |字段|类型|说明| |-|-|-| |Name|String|区域名称| |Capital|Object|首都信息| |GeoRectangle|Object|区域的经纬范围,可用于根据用户当前位置 判断用户是否处于该区域| |SeqID|INT|排序id| |GeoPt|list|区域中心位置 经纬坐标| |TelPref|String|电话号码前缀| ``` # 例子: respond["Results"]["AU"] = { 'Name': 'Australia', 'Capital': {'DLST': 1.0, 'TD': 10.0, 'Flg': 2, 'Name': 'Canberra', 'GeoPt': [-35.17, 149.13]}, 'GeoRectangle': {'West': 112.911048889, 'East': 153.639282227, 'North': -10.0628032684, 'South': -43.6439743042}, 'SeqID': 14, 'GeoPt': [-27.0, 133.0], 'TelPref': '61', 'CountryCodes': {'tld': 'au', 'iso3': 'AUS', 'iso2': 'AU', 'fips': 'AS', 'isoN': 36}, 'CountryInfo': 'http://www.geognos.com/geo/en/cc/au.html' } ``` current_house 字段说明: |字段|类型|说明| |-|-|-| |id|String|房子的id| |name|String|房子的名称| |owner_id|String|房子的owner的user_id| |is_owner|String|用户是否该房子的owner| |location|Object|房子的位置信息,latitude, longtitude, name| |device_counts|Number|房子当前的设备总数| |room_counts|Number|房子当前的房间总数| |members|list<member>|房子当前的成员列表| member 字段 说明: |字段|类型|说明| |-|-|-| |user_id|String|成员的user_id| |name|String|成员的昵称| |role|String|成员的角色,Owner 或者 Member| |is_accepted|boolean|成员是否已经接受成为该房子的成员| <span id="4"></span> ### 更新用户注册国家 -1. URL ```{base_url}/update_user_country``` -2. HTTP Method ```POST``` -3. Body Para |参数名称|类型|描述| |-|-|-| |country|Object|国家信息| ``` 国家信息格式 { 'Name': 'Australia', 'Capital': {'DLST': 1.0, 'TD': 10.0, 'Flg': 2, 'Name': 'Canberra', 'GeoPt': [-35.17, 149.13]}, 'GeoRectangle': {'West': 112.911048889, 'East': 153.639282227, 'North': -10.0628032684, 'South': -43.6439743042}, 'SeqID': 14, 'GeoPt': [-27.0, 133.0], 'TelPref': '61', 'CountryCodes': {'tld': 'au', 'iso3': 'AUS', 'iso2': 'AU', 'fips': 'AS', 'isoN': 36}, 'CountryInfo': 'http://www.geognos.com/geo/en/cc/au.html' } ``` -4. 返回格式 ``` { "code": 200, "data": None, "message": "Success" } code: 200 表示成功,其他表示错误,请参考message字段查看错误内容 data: None message: 消息描述 ``` <span id="5"></span> ### 更新用户昵称 -1. URL ```{base_url}/update_user_nickname``` -2. HTTP Method ```POST``` -3. Body Para |参数名称|类型|描述| |-|-|-| |nick_name|String|用户昵称| -4. 返回格式 ``` { "code": 200, "data": None, "message": "Success" } code: 200 表示成功,其他表示错误,请参考message字段查看错误内容 data: None message: 消息描述 ``` <span id="6"></span> ### 重置用户密码 -1. URL ```{base_url}/update_user_password``` -2. HTTP Method ```POST``` -3. Body Para |参数名称|类型|描述| |-|-|-| |password|String|用户密码| |email|String|邮件地址| |code_id|String|验证邮件地址时,获取到的code_id| -4. 返回格式 ``` { "code": 200, "data": None, "message": "Success" } code: 200 表示成功,其他表示错误,请参考message字段查看错误内容 data: None message: 消息描述 ``` <span id="7"></span> ### 更新用户头像 -1. URL ```{base_url}/update_user_avatarurl``` -2. HTTP Method ```POST``` -3. Body Para |参数名称|类型|描述| |-|-|-| |avatar_url|String|用户头像地址| -4. 返回格式 ``` { "code": 200, "data": None, "message": "Success" } code: 200 表示成功,其他表示错误,请参考message字段查看错误内容 data: None message: 消息描述 ``` ### APP侧SDK初始化接口 |接口功能|请求方式|API| |-|-|-| |萤石SDK-获取appkey和用户账号access_token|Firebase CF|萤石SDK初始化的时候,需要appkey和子用户access_token| |涂鸦SDK-获取appkey和appsecret|Firebase CF|涂鸦SDK初始化过程,需要appkey/appsecret,子用户的uid/passwword/country_code用于登录账号| >d 涂鸦和萤石的配网过程,均完全由SDK与三方云直接对接完成,SPS_Core只把控认证部分,SDK确认设备配网激活成功后,同步给SPS_Core。 萤石配网成功后,需要调用SPS_Core侧 添加设备接口,用于添加设备到该账号