caiyonglong / MusicLake

MediaPlayer、Exoplayer音乐播放器,可播在线音乐,qq音乐,百度音乐,虾米音乐,网易云音乐,YouTuBe
Apache License 2.0
2.66k stars 534 forks source link

Gihub 无法登录,提示The redirect_uri MUST match the registered callback URL for this application #91

Closed JadeVane closed 3 years ago

JadeVane commented 3 years ago

Describe the bug 已自建 player-be 作为云歌单服务,PC 端已正常登录,但手机端在浏览器完成 Github 的帐号认证后,提示

{"msg":"The redirect_uri MUST match the registered callback URL for this application.","log":{"name":"AuthorizationError","message":"The redirect_uri MUST match the registered callback URL for this application.","code":"redirect_uri_mismatch","uri":"https://docs.github.com/apps/managing-oauth-apps/troubleshooting-authorization-request-errors/#redirect-uri-mismatch","status":500}}

Smartphone (please complete the following information):

caiyonglong commented 3 years ago

Constants.java中的github登陆token修改了吗

JadeVane commented 3 years ago

都改了

caiyonglong commented 3 years ago

看一下你的 GITHUB_REDIRECT_URI ,和github上的Authorization callback URL是不是一致的

JadeVane commented 3 years ago
  1. 在 Constants.java 设置 GITHUB_REDIRECT_URI = "https://domain.com/auth/github/callback",登录时在 chrome 内显示“登录成功“字样,但未跳转到客户端
  2. 在 github 上添加了 musiclake://oauthcallback url,成功跳转到客户端,但显示登录超时
caiyonglong commented 3 years ago

第2点是OK的,显示登陆超时是应该是登陆接口问题。 因为这边认证成功后,还需要去调用自建服务器的登陆接口。

JadeVane commented 3 years ago

那自建服务器的接口要填哪里去

caiyonglong commented 3 years ago

也是在Constants.java,有一个BASE_PLAYER_URL,这个需要改成你自己服务器的域名

JadeVane commented 3 years ago

这个已经改成 API 的地址了,总共改了以下几项:

GITHUB_CLIENT_ID = "https://musiclake.xxx.com/";
GITHUB_CLIENT_SECRET = "https://xxx.vercel.app/";
BASE_PLAYER_URL = "Iv1.xxxxxxxxxxxxxx";
BASE_NETEASE_URL = "xxxxxxxxxxxxxxxxxxxxxxxxxx";
caiyonglong commented 3 years ago

这个得看具体的错误日志,错误日志打印还是标题的那个提示吗?

JadeVane commented 3 years ago

对,原本就是这样设置的。

日志可以在哪看到?

caiyonglong commented 3 years ago

在 github 上添加了 musiclake://oauth 为 callback url,成功跳转到客户端,但显示 登录超时

能成功跳转到客户端,说明登陆github应该已经成功了,只是登陆play-be后台接口失败了,登录超时是后台接口返回的数据,客户端只是提示而已。

优先看后台接口是否正常,github登陆接口auth/github/android,参数:网页回调到app的值access_token.是否请求成功。

JadeVane commented 3 years ago

尝试加入日志打印 console.log('debug', accesstoken) ,可能是下面代码标识处出了问题,因为在加在这行的前面可以在客户端提示 accesstoken is not defined ,但是放在后一行就没有任何显示了

    async (req: express.Request, res: express.Response, next: express.NextFunction) => {
        validationResult(req).throw()           //   <-- 这里出了问题
        // 获取用户信息
        const data = await axios.get('https://api.github.com/user', {
            headers: {
                Authorization: `token ${req.query.access_token}`,
            },
        })
caiyonglong commented 3 years ago

尝试加入日志打印 console.log('debug', accesstoken) ,可能是下面代码标识处出了问题,因为在加在这行的前面可以在客户端提示 accesstoken is not defined ,但是放在后一行就没有任何显示了

    async (req: express.Request, res: express.Response, next: express.NextFunction) => {
        validationResult(req).throw()           //   <-- 这里出了问题
        // 获取用户信息
        const data = await axios.get('https://api.github.com/user', {
            headers: {
                Authorization: `token ${req.query.access_token}`,
            },
        })

validationResult(req).throw() 这个应该就是检查请求参数的结构。

把这个req这个打印出来看看,或者打印console.log('debug', ${req.query.access_token}) 。

JadeVane commented 3 years ago

在每一行都试过打印

console.log('debug', `${req.query.access_token})`

服务端都没有日志显示,只有客户端显示 timeout

caiyonglong commented 3 years ago

在每一行都试过打印

console.log('debug', `${req.query.access_token})`

服务端都没有日志显示,只有客户端显示 timeout

你看看手机端能不能访问你的服务器接口,估计是接口请求超时了,请求还没有到服务器,所以服务端没有日志显示。

我这边也试过在本地局域网中,因为手机访问github访问不到,然后开了代理,然后访问不到服务器,提示了timeout。 关了代理,就能够请求成功了。

JadeVane commented 3 years ago

如果将日志输出放在 validationResult(req).throw() 前一行,会在客户端收到 accesstoken is not defined 的提示,所以应该是有连到服务器的,我之前也是开了代理,试着关闭了代理发现也没用

JadeVane commented 3 years ago

可能是配置有问题,我把配置贴在这里,看看能否提供一些线索

Constants.java ```java package com.cyl.musiclake.common; /** * Created by yonglong on 2016/5/8. */ public class Constants { //歌曲操作区分 public static final int OP_LOCAL = 0; //没有歌曲下载、删除、修改(后续会有)、添加到歌单 public static final int OP_ONLINE = 1; //没有歌曲删除、修改、添加到歌单 public static final int OP_PLAYLIST = 2;//修改(后续会有)、添加到歌单 public static final String WEIBO = "weibo"; //歌曲类型 public static final String LOCAL = "local"; public static final String QQ = "qq"; public static final String XIAMI = "xiami"; public static final String BAIDU = "baidu"; public static final String NETEASE = "netease"; public static final String VIDEO = "video";//本地视频 public static final String YOUTUBE = "youtube";//YouTube //特殊歌单类型 public static final String PLAYLIST_LOVE_ID = "love"; public static final String PLAYLIST_HISTORY_ID = "history"; public static final String PLAYLIST_LOCAL_ID = "local"; public static final String PLAYLIST_QUEUE_ID = "queue"; public static final String PLAYLIST_DOWNLOAD_ID = "download"; //百度歌单 public static final String PLAYLIST_BD_ID = "playlist_bd"; //网易云歌单 public static final String PLAYLIST_WY_ID = "playlist_wy"; public static final String PLAYLIST_WY_RECOMMEND_ID = "playlist_wy_recommend_songs"; //QQ歌单 public static final String PLAYLIST_QQ_ID = "playlist_qq"; //虾米歌单 public static final String PLAYLIST_XIA_MI_ID = "playlist_xm"; //在线歌单 public static final String PLAYLIST_CUSTOM_ID = "custom_online"; // public static final String PLAYLIST_SEARCH_ID = "playlist_search"; public static final String PLAYLIST_IMPORT_ID = "playlist_import"; //百度电台列表 public static final String BAIDU_RADIO_LIST = "baidu_radio_list"; public static final String NETEASE_ARITIST_LIST = "netease_artist_list"; /** * 搜索过滤 */ public static final String SP_KEY_SEARCH_FILTER_NETEASE = "sp_netease"; public static final String SP_KEY_SEARCH_FILTER_QQ = "sp_netease"; public static final String SP_KEY_SEARCH_FILTER_XIAMI = "sp_xiami"; public static final String SP_KEY_SEARCH_FILTER_BAIDU = "sp_baidu"; public static final String SP_KEY_SEARCH_FILTER_ = "sp_netease"; public static final String SP_KEY_SONG_QUALITY = "song_quality"; //歌单操作 public static final int PLAYLIST_ADD = 0; public static final int PLAYLIST_DELETE = 1; public static final int PLAYLIST_UPDATE = 2; public static final int PLAYLIST_RENAME = 3; //QQ APP_ID public static final String APP_ID = "101454823"; //社区后台操作php public static final String DEFAULT_URL = "http://119.29.27.116/hkmusic/operate.php"; public static final String LOGIN_URL = "http://119.29.27.116/hkmusic/login.php"; public static final String REGISTER_URL = "http://119.29.27.116/hkmusic/register.php"; public static final String UPLOAD_URL = "http://119.29.27.116/hkmusic/upload_file.php"; //用户邮箱 public static final String USER_EMAIL = "email"; //用户登录密码 public static final String PASSWORD = "password"; public static final String TOKEN = "token"; public static final String TOKEN_TIME = "token_time"; public static final String LOGIN_STATUS = "login_status"; //用户名 public static final String USERNAME = "username"; //性别 public static final String USER_SEX = "user_sex"; //性别 public static final String USER_IMG = "user_img"; public static final String USER_COLLEGE = "user_college"; public static final String USER_MAJOR = "user_major"; public static final String USER_CLASS = "user_class"; public static final String NICK = "nick"; public static final String PHONE = "phone"; public static final String SECRET = "secret"; //悬浮窗屏幕位置 public static final String FLOAT_VIEW_X = "float_view_x"; public static final String FLOAT_VIEW_Y = "float_view_y"; //更新用户信息 public static final String UPDATE_USER = "updateUserInfo"; //用户id public static final String USER_ID = "user_id"; //动态id public static final String SECRET_ID = "secret_id"; //内容[动态内容|评论内容] public static final String CONTENT = "content"; //功能 public static final String FUNC = "func"; //摇一摇歌曲 public static final String SONG_ADD = "addSong"; public static final String SONG = "song"; //是否是缓存 public static final String KEY_IS_CACHE = "is_cache"; //歌单 public static final String PLAYLIST_ID = "playlist"; public static final String IS_URL_HEADER = "http"; public static final String TEXT_PLAIN = "text/plain"; /** * 悬浮窗权限requestCode */ public static final int REQUEST_CODE_FLOAT_WINDOW = 0x123; public static final int REQUEST_CODE_LOGIN = 10001; //在线音乐 public static final String FILENAME_MP3 = ".mp3"; public static final String FILENAME_LRC = ".lrc"; public static final int MUSIC_LIST_SIZE = 10; public static final String BASE_MUSIC_URL = "http://tingapi.ting.baidu.com/v1/restserver/ting?" + "from=android&version=5.8.2.0&channel=huwei&operator=1&method=baidu.ting.billboard.billCategory&format=json&kflag=2"; public static final String DEAULT_NOTIFICATION = "notification"; public static final String TRANSTITION_ALBUM = "transition_album_art"; /** * QQ音乐Api************************************************* */ public static final String BASE_URL_QQ_MUSIC_URL = "https://u.y.qq.com"; /** * 虾米音乐Api************************************************* */ public static final String BASE_XIAMI_URL = "http://api.xiami.com/"; /** * 酷狗音乐Api************************************************* */ public static final String BASE_KUGOU_URL = "http://lyrics.kugou.com/"; /** * 百度音乐Api************************************************* */ public static final String BASE_URL_BAIDU_MUSIC = "http://musicapi.qianqian.com/"; public static final String URL_GET_SONG_INFO = "http://music.baidu.com/data/music/links?songIds="; /** * 在线歌单接口Api************************************************* */ public static final String BASE_PLAYER_URL = "https://musiclake.xxxxxx.com/"; /** * 网易云音乐接口 */ public static final String BASE_NETEASE_URL = "https://netease-xxxxxxx.vercel.app/"; /** * Bugly app_id */ public static final String BUG_APP_ID = "fd892b37ea"; /** * 关于的GitHub地址 */ public static final String ABOUT_MUSIC_LAKE = "https://github.com/caiyonglong/MusicLake"; public static final String ABOUT_MUSIC_LAKE_ISSUES = "https://github.com/caiyonglong/MusicLake/issues/new"; public static final String ABOUT_MUSIC_LAKE_PC = "https://github.com/sunzongzheng/music/releases"; public static final String ABOUT_MUSIC_LAKE_URL = "https://github.com/caiyonglong/MusicLake/blob/develop/README.md"; /** * 当前 DEMO 应用的 APP_KEY,第三方应用应该使用自己的 APP_KEY 替换该 APP_KEY */ public static final String APP_KEY = "3338754271"; /** * 当前 DEMO 应用的回调页,第三方应用可以使用自己的回调页。 * 建议使用默认回调页:https://api.weibo.com/oauth2/default.html */ public static final String REDIRECT_URL = "https://api.weibo.com/oauth2/default.html"; /** * WeiboSDKDemo 应用对应的权限,第三方开发者一般不需要这么多,可直接设置成空即可。 * 详情请查看 Demo 中对应的注释。 */ public static final String SCOPE = ""; // public static final String SOCKET_URL = "http://39.108.214.63:15003"; public static final String SOCKET_URL = "https://socket.zzsun.cc"; public static final String OAUTH_GITHUB = "oauth_github"; public static final String OAUTH_QQ = "oauth_qq"; public static final String OAUTH_WEIBO = "oauth_weibo"; public static final String GITHUB_BASE_URL = "https://github.com"; public static final String GITHUB_REDIRECT_URI = "musiclake://oauth"; public static final String GITHUB_CLIENT_ID = "xxxxxxxxxxxxxxxxxxxxxxxxx"; public static final String GITHUB_CLIENT_SECRET = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; public static final String GOOGLE_DEVELOPER_KEY = "AIzaSyCVdXoMhAPa1UdAyxKUK5Xp-uxWG612OEg"; } ```
caiyonglong commented 3 years ago

可能是配置有问题,我把配置贴在这里,看看能否提供一些线索

Constants.java

试试把地址改成http的,不用https

JadeVane commented 3 years ago

改成 http 后登录上了,但是打开歌单显示错误

caiyonglong commented 3 years ago

改成 http 后登录上了,但是打开歌单显示错误

自建歌单吗?请求的数据集发一下,估计是后台版本不一样,数据结构和客户端数据解析没对应上

JadeVane commented 3 years ago
  1. 是从 PC 端导入的网易云歌单,在 PC 端可以正常播放
  2. 编译 apk 用的是 develop 分支的最新代码,player-be 也是最新的,应该对得上
  3. 怎么获取这些请求的数据集
caiyonglong commented 3 years ago
  • 是从 PC 端导入的网易云歌单,在 PC 端可以正常播放
  • 编译 apk 用的是 develop 分支的最新代码,player-be 也是最新的,应该对得上
  • 怎么获取这些请求的数据集

可能是导入的歌单问题,客户端的这个album是个对象,而接口返回的是一个字符串,解析异常,看下这个接口请求返回的数据,这个应该在后台可以打印的,或者你可以通过抓包软件抓取一下接口返回数据