Awesome
Deprecated
-
不是标准流程,没有独立出来成为库的意义
-
授权页面样式定制化困难
CNode OAuth Login - Android
直接用 GitHub 账户登录 CNode社区,Android 端用组件。
iOS端对应的组件:暂时还没有,如果你开发了一个,请告诉我。
问题
该项目来源于下面这个讨论:
https://github.com/TakWolf/CNode-Material-Design/issues/37
原理
CNode 网站端仅能通过 GitHub 账户登录,使用 OAuth 2.0 授权。
有如下思路:
初始化一个 WebView,载入 CNode 登录地址:https://cnodejs.org/auth/github
GitHub 登录成功后,携带 code 回调: https://cnodejs.org/auth/github/callback?code=xxxxxxx
CNode 验证成功后,会重定向到首页:https://cnodejs.org/
这时截断这个重定向,取出 CNode 的 session_cookie,用这个 session_cookie 去抓取设置页面:https://cnodejs.org/setting
解析 HTML 文档,取出 AccessToken。
关于 OAuth 2.0 的更详细资料,请参考 https://oauth.net/2/
用法
添加依赖:
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'org.cnodejs.android:oauth-login:x.y.z'
该依赖会自动注册 CNodeOAuthLoginActivity
和网络权限。
在你的 Activity
中,启动授权页面:
private static final int REQUEST_CNODE_OAUTH_LOGIN = 1;
......
startActivityForResult(new Intent(this, CNodeOAuthLoginActivity.class), REQUEST_CNODE_OAUTH_LOGIN);
重写 onActivityResult
来监听返回值:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CNODE_OAUTH_LOGIN && resultCode == RESULT_OK && data != null) {
String accessToken = data.getStringExtra(CNodeOAuthLoginActivity.EXTRA_ACCESS_TOKEN); // 这里就是 API 鉴权用的 AccessToken
}
}
哪些 CNode 客户端在使用这个库?
请告诉我,如果你希望它出现在下面的列表中。
Dependencies
License
Copyright 2017 TakWolf
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.