【发布时间】:2015-11-17 20:53:39
【问题描述】:
好的 - 48 小时后我放弃了。我用 Doorkeeper 和 Devise 设置了 Rails 3.2 应用程序。 doorkeeper.rb 初始化器非常简单:
resource_owner_authenticator do
current_account || warden.authenticate!(:scope => :account)
end
我在 iOS Swift 应用程序中使用很棒的 p2_oauth POD 进行 OAuth2 连接。这是问题/奇怪之处:
当我登录并开始 OAuth2 舞蹈时,p2 使用 iOS 的嵌入式 Web 视图来访问我的 Rails API。由于没有 current_account,它会适当地重定向到登录。太好了。
但是 - 我无法退出。
我什么都试过了:
- warden.logout
- 退出
- session.delete("warden.user.account.key")
- 在调用注销路由时清除 Rails 应用程序中的 cookie
- 在调用注销路由时清除 Rails 应用程序中的会话
- 等
无论我做什么,当我再次登录时,Rails 应用程序都会保留 current_account!?我检查了会话,果然,会话中还有一个warden.user.account.key!真气人。
如果我在模拟器中停止并重新启动 iOS 应用程序,一切都会恢复正常,直到我登录/注销。很明显,iOS 正在维护一些会话,而不是清除 Rails 应用程序正在读取的会话。我还确保我的请求没有缓存策略:
request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalAndRemoteCacheData
request.setValue("application/json", forHTTPHeaderField: "Accept")
request.HTTPMethod = "DELETE"
let config = NSURLSessionConfiguration.defaultSessionConfiguration()
config.URLCache = nil
let session = NSURLSession(configuration: config)
let task : NSURLSessionDataTask = session.dataTaskWithRequest(request, completionHandler:
我真的不敢相信没有其他人遇到过这种情况。我应该如何使用此设置注销?
【问题讨论】:
-
您有没有想出解决方案?我也有类似的问题。
-
我最终使用密码授予流程而不是 Web 视图来避免整个 cookie 会话情况
标签: ios ruby-on-rails devise doorkeeper