sdk版本:(android平台)
implementation ('cn.leancloud:storage-android:6.0.3'){
exclude group: 'com.alibaba', module: 'fastjson'
exclude group: 'org.ligboy.retrofit2', module: 'converter-fastjson'
}
AppID:
tMEVjBCJrbyYLox16bb39YsG-gzGzoHsz
官方文档
https://leancloud.cn/docs/leanstorage_guide-java.html#hash1143158669
用户》第三方登录》扩展需求
新用户登录时必须填用户信息
满足需求:一个新用户使用第三方账号授权拿到相关信息后,仍然需要设置账号相关的用户名、手机号、密码等重要信息后,才被允许登录成功。
+
这时要使用 loginWithauthData 登录接口的 failOnNotExist 参数并将其设置为 ture。服务端会判断是否已存在能匹配上的 authData,否的话,返回 211 错误码和 Could not find user 报错信息。开发者根据这个 211 错误码,跳转到要求输入用户名、密码、手机号等信息的页面,实例化一个 AVUser 对象,保存上述补充数据,再次调用 loginWithauthData 接口进行登录,并 不再传入 failOnNotExist 参数。示例代码如下:
+
Map authData = new HashMap();
authData.put("expires_in", 7200);
authData.put("openid", "OPENID");
authData.put("access_token", "ACCESS_TOKEN");
authData.put("refresh_token", "REFRESH_TOKEN");
authData.put("scope", "SCOPE");
Boolean failOnNotExist = true;
AVUser user = new AVUser();
user.loginWithAuthData(authData,"weixin",failOnNotExist).subscribe(new Observer() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(AVUser avUser) {
System.out.println("存在匹配的用户,登录成功");
}
@Override
public void onError(Throwable e) {
AVException avException = new AVException(e);
int code = avException.getCode();
if (code == 211){
// 跳转到输入用户名、密码、手机号等业务页面
} else {
System.out.println("发生错误:" + e.getMessage());
}
}
@Override
public void onComplete() {
}
});
// 跳转到输入用户名、密码、手机号等业务页面之后
AVUser avUser = new AVUser();
avUser.setUsername("Tom");
avUser.setMobilePhoneNumber("+8618200008888");
avUser.loginWithAuthData(authData, "weixin").subscribe(new Observer() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(AVUser avUser) {
System.out.println("登录成功");
}
@Override
public void onError(Throwable e) {
System.out.println("登录失败:" + e.getMessage());
}
@Override
public void onComplete() {
}
});
我的代码
authData = new HashMap<String, Object>();
authData.put("expires_in", bean.getExpires_in());
authData.put("openid", bean.getOpenid());
authData.put("access_token", bean.getAccess_token());
authData.put("refresh_token", bean.getRefresh_token());
authData.put("scope", bean.getScope());
AVUser user = new AVUser();
user.loginWithAuthData(authData,"weixin",true).subscribe(new Observer<AVUser>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(AVUser avUser) {
ToastUtils.showShort("登录成功");
weixinCallback.success();
}
@Override
public void onError(Throwable e) {
AVException avException = new AVException(e);
int code = avException.getCode();
if (code == 211){
//注册 跳转到输入用户名、密码、手机号等业务页面
http_getUser(bean.getOpenid(),bean.getAccess_token());
} else {
ToastUtils.showShort("发生错误:" + e.getMessage());
weixinCallback.fail();
}
}
@Override
public void onComplete() {
}
});
结果报错
W/show: {"access_token":"26_US6Xkn_***********mMIuixXtSQdKPpcwMVBcs18tj_zERy1_UhBQ1IEk","expires_in":7200,"refresh_token":"26_ho**********pi0nFeG28","openid":"obEOy1R4M************a8n0OM","scope":"snsapi_userinfo","unionid":"oiMwQ0*************oNjHoiUn8"}
2019-10-30 21:24:55.189 7370-7948/english.ayaseeri.com W/System.err: java.lang.IllegalArgumentException: URL "/1.1/users" does not contain "{failOnNotExist}". (parameter #2)
2019-10-30 21:24:55.189 7370-7948/english.ayaseeri.com W/System.err: for method APIService.signup
2019-10-30 21:24:55.190 7370-7948/english.ayaseeri.com W/System.err: at retrofit2.Utils.methodError(Utils.java:52)
2019-10-30 21:24:55.190 7370-7948/english.ayaseeri.com W/System.err: at retrofit2.Utils.methodError(Utils.java:42)
2019-10-30 21:24:55.190 7370-7948/english.ayaseeri.com W/System.err: at retrofit2.Utils.parameterError(Utils.java:61)
2019-10-30 21:24:55.190 7370-7948/english.ayaseeri.com W/System.err: at retrofit2.RequestFactory$Builder.validatePathName(RequestFactory.java:776)
2019-10-30 21:24:55.190 7370-7948/english.ayaseeri.com W/System.err: at retrofit2.RequestFactory$Builder.parseParameterAnnotation(RequestFactory.java:395)
2019-10-30 21:24:55.190 7370-7948/english.ayaseeri.com W/System.err: at retrofit2.RequestFactory$Builder.parseParameter(RequestFactory.java:306)
2019-10-30 21:24:55.190 7370-7948/english.ayaseeri.com W/System.err: at retrofit2.RequestFactory$Builder.build(RequestFactory.java:193)
2019-10-30 21:24:55.190 7370-7948/english.ayaseeri.com W/System.err: at retrofit2.RequestFactory.parseAnnotations(RequestFactory.java:67)
2019-10-30 21:24:55.190 7370-7948/english.ayaseeri.com W/System.err: at retrofit2.ServiceMethod.parseAnnotations(ServiceMethod.java:26)
2019-10-30 21:24:55.190 7370-7948/english.ayaseeri.com W/System.err: at retrofit2.Retrofit.loadServiceMethod(Retrofit.java:170)
2019-10-30 21:24:55.190 7370-7948/english.ayaseeri.com W/System.err: at retrofit2.Retrofit$1.invoke(Retrofit.java:149)
2019-10-30 21:24:55.190 7370-7948/english.ayaseeri.com W/System.err: at java.lang.reflect.Proxy.invoke(Proxy.java:813)
2019-10-30 21:24:55.190 7370-7948/english.ayaseeri.com W/System.err: at $Proxy4.signup(Unknown Source)
2019-10-30 21:24:55.190 7370-7948/english.ayaseeri.com W/System.err: at cn.leancloud.core.StorageClient.signUpWithFlag(StorageClient.java:322)
2019-10-30 21:24:55.190 7370-7948/english.ayaseeri.com W/System.err: at cn.leancloud.AVUser.loginWithAuthData(AVUser.java:482)
请问何时解决?如何解决?在线等!