我正在开发一个Sinatra网络应用程序,我计划在其中添加Google登录功能。
虽然我能够理解Google的Oauth2身份验证机制,但一切似乎都运行良好,但我有一个关于维护会话的基本问题。 我正在使用Oauth2的服务器端Web应用程序流。
在此之前我问我的问题是我对Oauth2认证机制的理解。
用户点击“使用Google登录”按钮后,事件顺序为:
根据我在网络上遇到的情况,上述所有内容的代码都必须放在之前的过滤器中。
我的问题如下:
对于这个冗长的问题感到抱歉,感谢您的耐心等待。
答案 0 :(得分:1)
当用户点击Login链接并返回有效响应时,即request.env [“omniauth.auth”],您需要在会话中存储“uid”,然后在下一个请求中检查会话。喜欢这个
before do
unless ['/login', '/auth/google_oauth2/callback'].include?(action)
unless session[:uid]
redirect "/login"
end
end
end
get "/auth/google_oauth2/callback" do
session[:uid] = request.env["omniauth.auth"]["uid"]
redirect "/"
end
让我知道它是否有效。