我的策略是,如果没有nickname昵称,则从手机、邮箱名依次找。可是上面的情况,返回的数据没有username 或 user 名。我是创建了用户名 user3, 密码 user3 后登录测试的。现在我只能在网页显示此人名字为: N/A
*** 参考信息:
从:code: 2iFVjO3YzgTk0rL1INqxxxxxxxxxxxxxxx
得到:content: {‘access_token’: ‘eyJxxxxxxxxxxxxxxxxxxxxxx8g’, ‘scope’: ‘openid phone profile email’, ‘token_type’: ‘Bearer’}
得到用户信息:
content: {‘sub’: ‘610d00c0f5d92d3b7a8897e1’, ‘phone_number’: None, ‘phone_number_verified’: False, ‘birthdate’: None, ‘family_name’: None, ‘gender’: ‘U’, ‘given_name’: None, ‘locale’: None, ‘middle_name’: None, ‘name’: None, ‘nickname’: None, ‘picture’: ‘https://files.authing.co/authing-console/default-user-avatar.png’, ‘preferred_username’: None, ‘profile’: None, ‘updated_at’: ‘2021-08-15T10:14:00.349Z’, ‘website’: None, ‘zoneinfo’: None, ‘email’: None, ‘email_verified’: False}
用户自定义数据: {}
OIDC 的标准协议里面是没有 username 这个字段的,preferred_username 是客户端获取用户名称的字段,如果你是通过账户密码注册的,那么 email 和 phone 都是没有值的,你可以使用用户信息补全功能或者 SDK 来完成信息的补全。
可以参考这篇文章
https://docs.authing.cn/v2/concepts/oidc-common-questions.html
正如上面讨论的,那么,preferred_username应该是我用户登录时的值: user3 ,而不能是 None 吧?或者注册时,自动把 name 字段填上注册时的用户名,或者把 nickname 这个昵称默认填上注册时的名字吧。现在全取出来是 None ,就比较麻烦。
论坛回复不及时,可以加微信帮你解答。Authing-SA-刘献博
上图是系统后台的处理方式,是自动补齐成为 username 的。那么,在token后返回的content数据中加个 username 不是很好吗,如下:
content: {‘sub’: ‘610d00c0f5d92d3b7a8897e1’, ‘username’: ‘user3’, ‘phone_number’: None, ‘phone_number_verified’: False, ‘birthdate’: None, ‘family_name’: None, ‘gender’: ‘U’, ‘given_name’: None, ‘locale’: None, ‘middle_name’: None, ‘name’: None, ‘nickname’: None, ‘picture’: ‘https://files.authing.co/authing-console/default-user-avatar.png’, ‘preferred_username’: None, ‘profile’: None, ‘updated_at’: ‘2021-08-15T10:14:00.349Z’, ‘website’: None, ‘zoneinfo’: None, ‘email’: None, ‘email_verified’: False}
用户自定义数据: {}
Authing 用户池下 username 、phone 、email 作为用户唯一 key,OIDC 协议支持 phone 、email 作为用户唯一 key,所以不建议使用 username 作为用户唯一 key。
在你已经提供支持用户名/密码可注册的情况下,这种”不建议“还有什么意义?给我返回一个全部是空的用户信息,我哪知道此人是谁?用户此时看到自己叫 N/A ,感觉是傻了的。这能是最佳实践吗?
WangCK
10
首先很感谢你对于 Authing 产品的支持,你的需要目前我们已大概了解,为了能给你提供更专业的服务,麻烦你尽可能的提供一下你的环境上下文,比如:登录/注册方式是 API/SDK 还是 Authing 线上的托管页?如果方便的话可以大概描述一下你的业务需求,我们好给你提供更完善的解决方案。
再次感谢~
上面提交的内容已经很详细了。
我再按照建议,在“应用”中设定要求“注册信息补全”,然后指定了昵称和用户名两个字段需要补全。结果,新注册一个非手机号非邮箱的纯字符型账号后,系统下一步要求补全的用户名(此时是空的,本来应该注册时的账号名是最好的)成为了另一个新的账号了。感觉自行补全用户名,会发散出两个账号来了,而且下次登录又要补全?!建议此时的用户名自动使用注册时的账号名是最好的。
WangCK
12
Hello,如果你使用的是 SDK 的方式来注册用户,那么可以调用用户信息修改接口,来补全信息。如果使用的是 Authing 的线上登录组件,注册用户的时候就会有 phone 或者 email 作为唯一的 key。
另外,你的建议提得非常好,我会反馈给我们的产品同学的。
我是在PYTHON下调用的,这种特殊的账号(非手机/邮箱注册的)登录后,返回的全是空,哪知道谁登录了呀。