加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

RubyCAS拥有持久的单票和Sinatra

发布时间:2020-12-17 02:04:56 所属栏目:百科 来源:网络整理
导读:好吧,我是一个巨大的 RubyCAS菜鸟,这让我发疯. 我已经安装了rubycas-client gem,并在this repo跟随官方Sinatra设置.完成此设置的方式,每次我请求页面时,我都会收到一张作为查询附加到URL的一次性票证像这样: http:// localhost:9393 /?ticket = ST-13739
好吧,我是一个巨大的 RubyCAS菜鸟,这让我发疯.

我已经安装了rubycas-client gem,并在this repo跟随官方Sinatra设置.完成此设置的方式,每次我请求页面时,我都会收到一张作为查询附加到URL的一次性票证像这样:

http:// localhost:9393 /?ticket = ST-1373928850 …等

如果我刷新页面,我收到一个Sinatra错误,说票已经用完了!

那么我有两个问题.

>每次重新加载票证是否符合标准?
>如何保存会话的CAS登录并仍保留单点登出?

我做了什么:

>我已经离开并尝试实施:Sinatra中的会话,但这会导致单点注销失败.
>我已经尽力遵循rubycas-client GitHub Repo中的步骤(用Sinatra的会话助手替换ActiveRecord会话存储).

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分钟)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读