如何使用我们应用程序的 client_secret 调用 /oauth2/token 端点以交换代码以获取 Swift 中 DropBox 的访问令牌?
How to Call the /oauth2/token endpoint with our app’s client_secret to exchange the code for an access token for DropBox in Swift?
我正在使用 SwiftyDropbox 将 Dropbox 与我的 iOS 应用程序集成。我已经完成了所有配置并实现了文档中的代码。用户需要通过我的应用程序访问其保管箱帐户中的文件。当我尝试使用 'generated access token'(从保管箱控制台获取)时,我只能访问我自己帐户中的文件。我知道我们需要使用标准的 OAuth 流程来为其他用户获取访问令牌。
已按照 https://developers.dropbox.com/oauth-guide
中说明的步骤进行操作
使用我的应用程序的 client_id 和 redirect_uri.
构建了一个 Dropbox 授权 URL
下一步是使用我的应用程序的 client_secret 调用 /oauth2/token 端点以交换访问令牌的代码。我不确定如何实施。如果您之前解决过这个问题,请提供建议。下面给出了我的部分代码。
覆盖 func viewDidLoad() {
super.viewDidLoad()
self.actionDropboxLogin()
}
func actionDropboxLogin() {
if (DropboxClientsManager.authorizedClient != nil) {
//User is already authorized
//Fetch images from user's DropBox folder
self.getImageFromDropbox(path: "", isBack: false)
} else {
//User not authorized
//So we go for authorizing user first.
guard let rwURL = URL(string: "https://www.dropbox.com/oauth2/authorize?client_id=myclientid&redirect_uri=https://myapp/callback&response_type=code") else { return }
let scopeRequest = ScopeRequest(scopeType: .user, scopes: ["account_info.read files.content.read files.content.write files.metadata.read file_requests.read"], includeGrantedScopes: false)
DropboxClientsManager.authorizeFromControllerV2(
UIApplication.shared,
controller: self,
loadingStatusDelegate: nil,
openURL: { (url: URL) -> Void in UIApplication.shared.openURL(rwURL) },
scopeRequest: scopeRequest
)
self.getImageFromDropbox(path: "", isBack: false)
}
}`
func getImageFromDropbox(path:String, isBack:Bool) {
let client = DropboxClientsManager.authorizedClient
if client != nil {
//code for getting list of folder, images or videos here.
}
self.tableView.reloadData()
}
当我在控制台中打印 client 的值时,它是 nil。所以条件 'if client != nil' 为假,我无法获取文件。这意味着我没有获得访问令牌。
使用 SwiftyDropbox SDK 时,您无需直接处理任何 /oauth2/authorize 或 /oauth2/token 细节。 SDK 为您实现应用程序授权流程。您应该只执行此处记录的流程:
https://github.com/dropbox/SwiftyDropbox#configure-your-project
我正在使用 SwiftyDropbox 将 Dropbox 与我的 iOS 应用程序集成。我已经完成了所有配置并实现了文档中的代码。用户需要通过我的应用程序访问其保管箱帐户中的文件。当我尝试使用 'generated access token'(从保管箱控制台获取)时,我只能访问我自己帐户中的文件。我知道我们需要使用标准的 OAuth 流程来为其他用户获取访问令牌。
已按照 https://developers.dropbox.com/oauth-guide
中说明的步骤进行操作使用我的应用程序的 client_id 和 redirect_uri.
构建了一个 Dropbox 授权 URL下一步是使用我的应用程序的 client_secret 调用 /oauth2/token 端点以交换访问令牌的代码。我不确定如何实施。如果您之前解决过这个问题,请提供建议。下面给出了我的部分代码。
覆盖 func viewDidLoad() { super.viewDidLoad()
self.actionDropboxLogin() } func actionDropboxLogin() { if (DropboxClientsManager.authorizedClient != nil) { //User is already authorized //Fetch images from user's DropBox folder self.getImageFromDropbox(path: "", isBack: false) } else { //User not authorized //So we go for authorizing user first. guard let rwURL = URL(string: "https://www.dropbox.com/oauth2/authorize?client_id=myclientid&redirect_uri=https://myapp/callback&response_type=code") else { return } let scopeRequest = ScopeRequest(scopeType: .user, scopes: ["account_info.read files.content.read files.content.write files.metadata.read file_requests.read"], includeGrantedScopes: false) DropboxClientsManager.authorizeFromControllerV2( UIApplication.shared, controller: self, loadingStatusDelegate: nil, openURL: { (url: URL) -> Void in UIApplication.shared.openURL(rwURL) }, scopeRequest: scopeRequest ) self.getImageFromDropbox(path: "", isBack: false) } }` func getImageFromDropbox(path:String, isBack:Bool) { let client = DropboxClientsManager.authorizedClient if client != nil { //code for getting list of folder, images or videos here.
} self.tableView.reloadData() }
当我在控制台中打印 client 的值时,它是 nil。所以条件 'if client != nil' 为假,我无法获取文件。这意味着我没有获得访问令牌。
使用 SwiftyDropbox SDK 时,您无需直接处理任何 /oauth2/authorize 或 /oauth2/token 细节。 SDK 为您实现应用程序授权流程。您应该只执行此处记录的流程:
https://github.com/dropbox/SwiftyDropbox#configure-your-project