oauth
OAuth模块管理客户端的用户登录授权验证功能,允许应用访问第三方平台的资源。
OAuth接口支持Web开发者获取终端安装的第三方平台软件(如微信、微博等)环境,调用第三方平台软件的授权页面进行登录授权验证操作。若终端安装了对应的社交客户端环境,则调用客户端的授权界面,否则调用WAP页面进行登录授权验证。
方法:
- getServices: 获取登录授权认证服务列表
对象:
- AuthService: 登录授权认证服务对象
- AppleInfo: 苹果登录认证信息
- AuthOptions: JSON对象,授权认证参数选项
- AuthInfo: 登录授权认证信息
- UserInfo: 登录授权用户信息
回调方法:
- ServicesSuccessCallback: 获取登录授权认证服务成功回调
- AuthorizeSuccessCallback: 授权认证成功回调函数
- LogoutSuccessCallback: 注销登录授权认证操作成功回调函数
- SuccessCallback: 登录授权认证服务操作成功回调函数
- ErrorCallback: 登录授权认证服务操作失败回调函数
权限:
permissions
{
// ...
"permissions":{
// ...
"OAuth": {
"description": "登录鉴权"
}
}
}
getServices
获取登录授权认证服务列表
void plus.oauth.getServices( successCB, errorCB );
说明:
获取终端支持的权登录认证服务列表,可用于提示用户进行登录平台的选择。获取登录授权认证服务成功后通过successCB回调返回支持的所有服务列表,获取服务失败则通过errorCB回调返回失败信息。
参数:
- successCB: (ServicesSuccessCallback)必选 获取登录授权认证服务成功回调函数获取登录授权认证服务列表成功时触发回调,并返回终端支持的登录授权认证服务列表。
- errorCB: (ErrorCallback)可选 获取登录授权认证服务失败回调函数获取登录授权认证服务列表失败时触发回调,并返回错误信息。
返回值:
void: 无
示例:
// 微信授权登录对象
var aweixin=null;
// 当前环境支持的所有授权登录对象
var auths = {};
// 获取登录授权认证服务列表,单独保存微信登录授权对象
// 5+APP在plusready事件中调用,uni-app在vue页面的onLoad中调用
function getService(){
plus.oauth.getServices(function(services){
for(var i in services){
auths[service.id]=service;
}
aweixin = auths['weixin'];
}, function(e){
plus.nativeUI.alert("获取登录授权服务列表失败:"+JSON.stringify(e));
} );
}
AuthService
登录授权认证服务对象
interface plus.oauth.AuthService {
// Attributes
attribute String id;
attribute String description;
attribute AppleInfo appleInfo;
attribute AuthInfo authResult;
attribute UserInfo userInfo;
attribute JSON extra;
// Methods
function void author(successCallback, errorCallback, options);
function void login(successCallback, errorCallback, options);
function void logout(successCallback, errorCallback);
function void getUserInfo(successCallback, errorCallback);
function void addPhoneNumber(successCallback, errorCallback);
}
说明:
AuthService对象用于表示登录授权认证服务,在JS中为对象,用于向系统进行登录授权认证操作。
属性:
- id: 登录授权认证服务标识
- description: 登录授权认证服务描述
- appleInfo: 苹果登录认证数据
- authResult: 登录认证数据
- userInfo: 登录用户信息
- extra: 登录授权认证扩展信息
方法:
- authorize: 请求授权认证
- login: 请求登录认证
- logout: 注销登录认证
- getUserInfo: 获取用户信息
id
登录授权认证服务标识
说明:
String类型 只读属性
用于表示登录授权认证服务标识:"weixin" - 表示微信登录授权;"qq" - 表示QQ登录授权;"sinaweibo" - 表示新浪微博登录授权;"xiaomi" - 表示小米登录授权;"apple" - 表示苹果登录(仅iOS13+系统支持);"qihoo" - 表示360账号登录(仅360手助流应用环境下支持)。
description
登录授权认证服务描述
说明:
String类型 只读属性 可选属性
用于描述登录授权认证服务的信息:"微信" - 表示微信登录授权;"QQ" - 表示QQ登录授权;"新浪微博" - 表示新浪微博登录授权;"小米" - 表示小米登录授权;"Apple" - 表示苹果登录;"360账号" - 表示360账号登录(仅360手助流应用环境下支持)。
appleInfo
苹果登录认证数据
说明:
AppleInfo类型 只读属性 可选属性
调用login登录认证成功后保存的苹果认证信息。
authResult
登录认证数据
说明:
AuthInfo类型 只读属性 可选属性
调用login登录认证成功后保存的认证信息。如果值为"undefined"则表示未进行登录认证或者登录认证失败。
userInfo
登录用户信息
说明:
UserInfo类型 只读属性 可选属性
调用用于保存登录授权认证获取的用户信息,如果值为"undefined"则表示未获取过用户信息。
extra
登录授权认证扩展信息
说明:
JSON类型 只读属性 可选属性
用于保存登录授权认证服务返回的扩展信息,具体内容由各登录平台决定,如果没有扩展信息则为undefined。例如“微信”,则可保存以下数据:state - 用于保持请求和回调的状态参数。
authorize
请求授权认证
void obj.authorize(successCallback, errorCallback, options);
说明:
向开放平台请求进行授权认证,需提供授权域(scope),用户在终端确认后通过成功回调返回授权临时票据(code)。开发者可以将授权临时票据(code)提交到业务服务器,由业务服务器从微信开放平台获取授权登录等相关信息,避免将appsecret等信息保存在客户端可能引起泄露的问题。注意:目前仅微信平台支持请求授权认证,其它平台调用此方法将返回错误回调。
参数:
- successCallback: (AuthorizeSuccessCallback)必选 成功回调函数授权认证操作成功时触发,并返回授权票据(code)。
- errorCallback: (ErrorCallback)可选 错误回调函数授权认证操作失败时触发,并返回错误信息(code&message).
- options: (AuthOptions)可选 授权认证的参数授权认证平台支持的参数,微信开放平台支持:scope - 申请的权限作用范围;state - 自定义数据,成功回调时返回;appid - 开放平台申请的应用标识,如果不配置,则使用应用打包时配置的appid。
返回值:
void: 无
示例:
// 微信授权登录对象
var aweixin=null; // 调用plus.oauth.getServices获取保存
// 获取微信登录授权对象后可进行授权操作
function authorize(){
if(!aweixin){
plus.nativeUI.alert("当前环境不支持微信登录");
return;
}
aweixin.authorize(function(e){
plus.nativeUI.alert("授权成功:"+JSON.stringify(e));
}, function(e){
plus.nativeUI.alert("授权失败:"+JSON.stringify(e));
}, {scope:'snsapi_userinfo',state:'authorize test',appid:'WX**********'});
}
login
请求登录认证
void obj.login(successCallback, errorCallback, options);
说明:
在登录前可通过对象的authResult属性判断是否已经登录认证过,通常只需对没有登录认证过的服务进行此操作。登录后可获取应用的基础信息(如用户昵称等)保存在authResult属性中。登录操作成功后通过successCallback回调函数通知,失败则通过errorCallback回调函数通知。
参数:
- successCallback: (SuccessCallback)必选 登录认证成功回调函数登录认证操作成功时触发,并返回登录认证成功信息。
- errorCallback: (ErrorCallback)可选 登录认证失败回调函数登录认证操作失败时触发,并返回错误信息。
- options: (AuthOptions)可选 登录认证参数登录认证使用的额外参数。
返回值:
void: 无
示例:
// 微信授权登录对象
var aweixin=null; // 调用plus.oauth.getServices获取保存
// 通常登录前需要先调用authorize方法进行授权
// 获取微信登录授权对象后可进行登录认证操作
function authLogin(){
if(!aweixin){
plus.nativeUI.alert("当前环境不支持微信登录");
return;
}
if(!aweixin.authResult){
aweixin.login(function(e){
plus.nativeUI.alert("登录认证成功!");
}, function(e){
plus.nativeUI.alert("登录认证失败: "+JSON.stringify(e));
} );
}else{
plus.nativeUI.alert("已经登录认证!");
}
}
logout
注销登录认证
void obj.logout(successCallback, errorCallback);
说明:
注销登录认证后,再次获取用户信息时需重新进行授权登录认证操作。如果第三方平台不需要注销登录操作,则清空保存的登录认证等信息。
参数:
- successCallback: (LogoutSuccessCallback)必选 注销登录认证成功回调函数注销登录认证操作成功时触发。
- errorCallback: (ErrorCallback)可选 注销登录认证失败回调函数注销登录认证操作失败时触发,并返回错误信息。
返回值:
void: 无
示例:
// 微信授权登录对象
var aweixin=null; // 调用plus.oauth.getServices获取保存
// 调用authorize、login先授权登录认证
// 注销登录认证
function authLogout(){
if(!aweixin){
plus.nativeUI.alert("当前环境不支持微信登录");
return;
}
aweixin.logout(function(e){
plus.nativeUI.alert("注销登录认证成功!");
}, function(e){
plus.nativeUI.alert("注销登录认证失败: "+JSON.stringify(e));
});
}
getUserInfo
获取用户信息
void obj.getUserInfo(successCallback, errorCallback);
说明:
在获取用户信息前可通过对象的userInfo属性判断是否已经获取过,通常只需对没有获取过用户信息的服务进行此操作。获取用户信息成功后通过successCallback回调函数通知,失败则通过errorCallback回调函数通知。
参数:
- successCallback: (SuccessCallback)必选 获取登录授权用户信息成功回调函数获取登录认证用户信息操作成功时触发,并返回用户的信息。
- errorCallback: (ErrorCallback)可选 获取登录授权用户信息失败回调函数获取登录认证用户信息操作失败时触发,并返回错误信息。
返回值:
void: 无
示例:
// 微信授权登录对象
var aweixin=null; // 调用plus.oauth.getServices获取保存
// 通常登录前需要先调用authorize方法进行授权,调用login方法进行登录认证
// 获取微信登录授权对象后获取用户信息操作
function authUserInfo(){
if(!aweixin){
plus.nativeUI.alert("当前环境不支持微信登录");
return;
}
if(aweixin.authResult){
aweixin.getUserInfo( function(e){
plus.nativeUI.alert("获取用户信息成功:"+JSON.stringify(aweixin.userInfo));
}, function(e){
plus.nativeUI.alert("获取用户信息失败: "+JSON.stringify(e));
} );
}else{
plus.nativeUI.alert("未登录认证!");
}
}
AppleInfo
苹果登录认证信息
interface plus.oauth.AppleInfo {
attribute String user;
attribute String state;
attribute String email:
attribute JSON fullName;
attribute String authorizationCode;
attribute String identityToken;
attribute Number realUserStatus;
attribute String scope;
}
说明:
此对象仅在使用苹果登录时有效,用于保存苹果登录返回的数据。
属性:
- user: (String类型)苹果用户唯一标识符
- state: (String类型)验证信息状态
- email: (String类型)用户共享的可选电子邮件
fullName: (JSON类型)用户共享的可选全名可能包括以下属性:namePrefix - String类型,名字前缀,头衔、敬称;givenName - String类型,名字;middleName - String类型,中间名;familyName - String类型,姓;nameSuffix - String类型,名字后缀,学位、荣誉;nickName - String类型,昵称。
authorizationCode: (String类型)验证数据
- identityToken: _(String类型)_Web令牌(JWT)
- realUserStatus: (Number类型)标识用户是否为真实的人0 - 当前平台不支持,忽略该值;1 - 无法确认;2 - 用户真实性非常高。
平台支持:
- Android- ALL(不支持)
- iOS- 13+(支持): HBuilderX2.3.7+版本支持苹果登录。
AuthOptions
JSON对象,授权认证参数选项
interface plus.oauth.AuthOptions {
attribute String scope;
attribute String state;
attribute String appid;
attribute String appkey;
attribute String appsecret;
attribute String redirect_uri;
}
说明:
此对象支持的属性值由登录授权认证服务定义。例如“微信”,则可配置以下参数:scope - 应用授权作用域;state - 用于保持请求和回调的状态参数。
属性:
scope: (String类型)申请的权限作用范围如果存在多个权限,则以","符号分割。
state: (String类型)客户端的当前状态,可以指定任意值,登录认证后原封不动的返回保存到AuthService对象的extra中
appid: (String类型)登录授权认证服务平台申请的appid动态设置登录授权服务中需要使用的appid,仅需要此参数的登录授权服务(如“微信登录”、“QQ登录”)支持。如果未设置则使用运行环境中内置的appid值(如在HBuilder中可在manifest.json的SDK配置项中进行设置)。
appkey: (String类型)登录授权认证服务平台申请的appkey动态设置登录授权服务中需要使用的appkey,仅需要此参数的登录授权服务(如“新浪微博登录”、“360登录”)支持。如果未设置则使用运行环境中内置的appkey值(如在HBuilder中可在manifest.json的SDK配置项中进行设置)。
appsecret: (String类型)登录授权认证服务平台申请的appsecret动态设置登录授权服务中需要使用的appsecret,仅需要此参数的登录授权服务(如“微信登录”、“新浪微博登录”)支持。如果未设置则使用运行环境中内置的appkey值(如在HBuilder中可在manifest.json的SDK配置项中进行设置);当开放平台申请的appsecret值涉及到安全问题时,可在应用运行时从服务器获取,然后通过此api动态设置。
redirecturl: (String类型)_登录授权认证服务平台申请的redirect_url动态设置登录授权服务中需要使用的redirect_url,仅需要此参数的登录授权服务(如“新浪微博登录”)支持。如果未设置则使用运行环境中内置的redirect_url值(如在HBuilder中可在manifest.json的SDK配置项中进行设置)。
示例:
// 微信授权登录对象
var aweixin=null; // 调用plus.oauth.getServices获取保存
// 获取微信登录授权对象后可进行授权操作
function authorize(){
if(!aweixin){
plus.nativeUI.alert("当前环境不支持微信登录");
return;
}
aweixin.authorize(function(e){
plus.nativeUI.alert("授权成功:"+JSON.stringify(e));
}, function(e){
plus.nativeUI.alert("授权失败:"+JSON.stringify(e));
}, {scope:'snsapi_userinfo',appid:'WX**********'});
}
AuthInfo
登录授权认证信息
interface plus.oauth.AuthInfo {
attribute String openid;
attribute String access_token;
attribute String expires_in:
attribute String refresh_token;
attribute String scope;
}
说明:
此对象仅定义标准属性,登录授权认证服务可扩展自定义数据。例如“微信”登录授权服务,则包括以下数据:unionid - 用户统一标识,针对一个微信开放平台帐号下的应用,同一用户的unionid是唯一的。
属性:
accesstoken: (String类型)_登录授权的访问令牌如果登录授权服务不支持此属性,则返回"undefined"。
openid: (String类型)登录授权用户的唯一标识如果登录授权服务不支持此属性,则返回"undefined"。
expiresin: (String类型)_登录授权访问令牌过期时间单位为秒,如果登录授权服务不支持此属性,则返回"undefined"。
refreshtoken: (String类型)_登录授权的更新令牌用来获取下一次的访问令牌,如果登录授权服务不支持此属性,则返回"undefined"。
scope: (String类型)登录授权的权限范围如果存在多个权限,则以","符号分割。
UserInfo
登录授权用户信息
interface plus.oauth.UserInfo {
attribute String openid;
attribute String headimgurl:
attribute String nickname;
attribute String email;
attribute String phonenumber;
attribute String sex;
attribute String province;
attribute String city;
attribute String country;
}
说明:
用于保存登录授权用户的信息。此对象仅定义标准属性,登录授权认证服务可扩展自定义数据。例如“微信”登录授权服务,可能包括以下自定义数据:privilege - 用户特权信息,json数组,如微信沃卡用户为(chinaunicom);unionid - 用户统一标识,针对一个微信开放平台帐号下的应用,同一用户的unionid是唯一的。
属性:
openid: (String类型)登录授权用户的唯一标识如果登录授权服务不支持此属性,则返回"undefined"。
headimgurl: (String类型)登录授权用户的头像图片地址要求为"http://"或"https://"开头的地址,如果登录授权服务不支持此属性,则返回"undefined"。
nickname: (String类型)登录授权用户的昵称如果登录授权服务不支持此属性,则返回"undefined"。
email: (String类型)登录授权用户的邮箱地址如果登录授权服务不支持此属性,则返回"undefined"。
phonenumber: (String类型)登录授权用户的电话号码如果登录授权服务不支持此属性,则返回"undefined"。
sex: (String类型)登录授权用户的性别1为男性,2为女性。如果登录授权服务不支持此属性,则返回"undefined"。
province: (String类型)登录授权用户注册的省份信息如果登录授权服务不支持此属性,则返回"undefined"。
city: (String类型)登录授权用户注册的城市信息如果登录授权服务不支持此属性,则返回"undefined"。
country: (String类型)登录授权用户注册的国家信息如果登录授权服务不支持此属性,则返回"undefined"。
ServicesSuccessCallback
获取登录授权认证服务成功回调
void ServicesSuccessCallback( services ) {
// Get oauth services success code
}
说明:
当获取登录授权认证服务列表成功时触发,并通过services参数返回运行环境支持的登录授权认证服务列表。
参数:
- services: (Array[AuthService])必选 运行环境支持的登录授权认证服务列表运行环境支持的登录授权认证服务列表数组,可通过services.length获取服务列表的数目。如果当前运行环境没有支持的登录授权认证服务,则返回空数组。
返回值:
void: 无
AuthorizeSuccessCallback
授权认证成功回调函数
void onAuthorizeSuccess(event){
// authorize code
}
说明:
授权认证成功时触发,并返回操作结果。
参数:
- event: (JSON)必选 授权认证回调参数包括以下字段:event.target - 授权认证服务对象;event.scope - 申请的权限作用范围,调用authorize方法传入的scope值;event.state - 自定义参数,调用authorize方法传入的state值;event.code - 用户换取access_token的code;event.lang - 微信客户端当前语言;event.country - 微信用户当前国家信息。
返回值:
void: 无
LogoutSuccessCallback
注销登录授权认证操作成功回调函数
void onLogoutSuccess(event){
// logout code
}
说明:
注销登录授权认证成功时触发,并返回操作结果。
参数:
- event: (JSON)必选 注销登录授权认证操作回调事件参数包括以下参数:event.target - 表示登录授权认证服务对象;其它属性可保存注销登录授权的扩展数据。
返回值:
void: 无
SuccessCallback
登录授权认证服务操作成功回调函数
void onSuccess(event){
// auth code
}
说明:
登录授权认证服务操作如请求登录授权认证、获取登录授权用户信息成功时触发,并返回操作结果。
参数:
- event: (JSON)必选 登录授权认证服务操作回调事件参数包括以下参数:event.target - 表示登录授权认证服务对象,可以通过此对象的authResult、userInfo属性来获取操作结果信息。
返回值:
void: 无
ErrorCallback
登录授权认证服务操作失败回调函数
void onError(error){
// Error code
}
说明:
登录授权认证服务操作如请求登录授权认证、注销登录授权认证、获取登录授权用户信息失败时触发,并返回错误信息。
参数:
- error: (Exception)必选 操作失败错误信息包括以下参数:error.code - 表示错误代码;error.message - 错误描述信息;
返回值:
void: 无