RubyCAS拥有持久的单票和Sinatra
好吧,我是一个巨大的
RubyCAS菜鸟,这让我发疯.
我已经安装了rubycas-client gem,并在this repo跟随官方Sinatra设置.完成此设置的方式,每次我请求页面时,我都会收到一张作为查询附加到URL的一次性票证像这样: http:// localhost:9393 /?ticket = ST-1373928850 …等 如果我刷新页面,我收到一个Sinatra错误,说票已经用完了! 那么我有两个问题. >每次重新加载票证是否符合标准? 我做了什么: >我已经离开并尝试实施:Sinatra中的会话,但这会导致单点注销失败. Sinatra的RubyCAS文档很差,所以我正在寻找一个明确的答案. 解决方法
当您尝试使用相同的票证重新加载页面时,它正在执行正确的操作.该票已经过验证.获得验证响应后,您需要设置自己的应用程序cookie或其他会话选项.
我通常会添加一个方法,将会话属性添加到用户的cookie中,如: session["cas"]["username"] = <user from cas validation response> 然后在将来的请求中,Sinatra应用程序可以使用辅助方法保护您想要的任何路由,例如: cas = RestClient::Resource.new "#{cas_url}/login",:timeout => 5 checked = cas.get return true if checked.code == 200 在我的Sinatra配置块中,我这样做: use Rack::Session::Cookie,:key => "example.com",:secret => "veryrandomhex" 我希望这有帮助,有任何问题让我知道. 更新下面 在讨论这个问题时,我们发现RubyCas说在使用CAS时不会在生产中使用常规cookie会话用于ruby应用程序.你想要做的是: A.确保您的cookie在CAS cookie的同时或更早到期 和/或 B.确保您的cookie是每个浏览器会话,然后在下一个浏览器会话中重新验证CAS用户. 对于Rack cookie,您可以在cookie设置为expire时指定此额外配置:: expire_after => 1440,(1440分钟) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |