gpt4 book ai didi

ios - 使用 Doorkeeper 和 Devise 连接到 Rails API 时无法注销 iOS Swift 应用程序

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:56:25 24 4
gpt4 key购买 nike

好的 - 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 连接。这是问题/奇怪之处:<​​/p>

当我登录并且 OAuth2 舞蹈开始时,p2 使用 iOS 的嵌入式 Web View 访问我的 Rails API。由于没有 current_account,它会适本地重定向到登录。太好了。

但是 - 我无法退出。

我已经尝试了一切:

  • warden.logout
  • 退出
  • session.delete("warden.user.account.key")
  • 在调用注销路由时清除 Rails 应用程序中的 cookie
  • 在调用注销路由时清除 Rails 应用程序中的 session
  • 等等

无论我做什么,当我再次登录时,Rails 应用程序都会保留 current_account!?我检查了 session ,果然, session 中还有一个 warden.user.account.key!真气人。

如果我在模拟器中停止并重新启动 iOS 应用程序,一切都会恢复正常,直到我登录/注销。很明显,这就像 iOS 正在维护一些 session ,而不是清除 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:

老实说,我不敢相信没有其他人遇到过这种情况。我应该如何使用此设置注销?

最佳答案

只是想跟进您的评论。

只是回顾一下我遇到的问题是什么让我想到了你的问题:用户可以正常登录,但无法正确注销。一旦他们再次点击登录,它将自动登录而无需再次询问密码。

如您所说,使用密码授予流程确实可以避免 cookie session 。对我来说,我不得不在我的 iOS 应用程序中使用某种 webview。所以我不得不坚持使用 authorization_code 授权。

我花了整整一周的时间试图弄清楚 doorkeeper+devise 是怎么回事(我所有的链接都是紫色的...),我终于找到了一个适合我的解决方案。我不确定这是正确的方法,因为我根本不熟悉 ruby​​ on rails。稍后我将不得不再次检查代码。

基本上,要做的是将它添加到 config/routes.rb 中,你说 user_doorkeeper

use_doorkeeper do
controllers applications: 'doorkeeper', authorizations: 'authorizations'
end

然后在此处添加授权 Controller app/controllers/authorizations_controller.rb

class AuthorizationsController < Doorkeeper::AuthorizationsController
def new
super
env['warden'].logout
end
end

这会强制用户在登录时注销。对于代码,我认为它正在做的是覆盖/添加代码到 Doorkeeper 中的原始 AuthorizationsController。

我在某人的博客上找到了这个解决方案,谢谢您好先生!现在就可以了。 http://www.kluks.de/blog/posts/14-rails-4-single-sign-out-of-all-applications-with-doorkeeper .

------------ 编辑------------

作为引用,对于提供商方面,我一直在关注这个 guide ,同时添加我需要的东西。不过,我不建议遵循她的客户端教程。这对我来说根本行不通。

doorkeeper.rb

Doorkeeper.configure do
use_refresh_token
force_ssl_in_redirect_uri false

#for authorization_code grant
resource_owner_authenticator do
current_user || begin
session[:user_return_to] = request.fullpath
redirect_to new_user_session_url
end
end

end

关于ios - 使用 Doorkeeper 和 Devise 连接到 Rails API 时无法注销 iOS Swift 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33766782/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com