考虑这个示例来自PHP的身份验证https://developers.soundcloud.com/docs/api/guide#authentication似乎建议您在用户通过身份验证过程时将重定向URL作为参数传递:
require_once 'Services/Soundcloud.php';
// create client object with app credentials
$client = new Services_Soundcloud(
'CLIENT_ID', 'CLIENT_SECRET', 'REDIRECT_URL');
// redirect user to authorize URL
header("Location: " . $client->getAuthorizeUrl());
注意构造函数调用中的'REDIRECT_URL'参数。
这似乎表明我可以将任意重定向url作为参数传递,就像你可以用Twitter做的那样(API非常相似)。
但是,如果我传递的网址与为应用程序配置的唯一重定向网址不匹配,则在用户重定向到我的网址时出现错误: 的错误= redirect_uri_mismatch&安培; ERROR_DESCRIPTION = +的重定向+ URI +提供+确实+ +不匹配+ A +预注册+值
那么,如果唯一有效的值是为应用程序配置的重定向URL,该参数应该是什么?
如果用户只能在身份验证后重定向到一个固定网址,那么你应该如何处理身份验证?这使得API完全无法使用。当您有用户登录任何API(例如Twitter或Facebook)时,您需要将它们返回到他们点击该链接以登录的页面,这是一个荒谬的限制网址是独一无二的。我见过的其他社交网络api都没有这个限制。
SoundCloud API真的如此缺陷还是我遗失了什么?
答案 0 :(得分:2)
我得到了Glen-Scott的答案,他是php-soundcloud库的作者(围绕这个糟糕的API的相当不错的包装器)提供了一个解决方法。这很痛苦,因为它涉及额外的重定向,但它是所有API允许的。
https://github.com/mptre/php-soundcloud/issues/36
我引用:
API不允许任意URL。如你所知,这是不同的 大多数其他oAuth支持的社交网络API。我可以解决这个问题 建议使用state参数传回返回的URL。 您可以在生成授权URL时执行此操作:
$client->getAuthorizeUrl( array( 'state' => 'http://example.com/return' ) You'll get the state parameter added to the static redirect URL. For example, if you set your redirect URL to
http://example.com/callback然后SoundCloud将重定向 经过身份验证的用户 http://example.com/callback?state=http://example.com/return
您的回调脚本需要查找状态GET参数, 并使用它重定向。