我正忙于将一个非常小的 Web 应用程序从 ASP.NET MVC 2 移植到 Ruby/Sinatra。
在 MVC 应用程序中,当根据数据库正确验证用户登录时,FormsAuthentication.SetAuthCookie 用于设置持久 cookie。
我想知道 Sinatra 中的表单身份验证相当于什么?所有的身份验证框架看起来都非常庞大,并不是我真正想要的。
这是一个非常简单的 Sinatra 身份验证方案。
我将在下面解释它是如何工作的。
class App < Sinatra::Base
set :sessions => true
register do
def auth (type)
condition do
redirect "/login" unless send("is_#{type}?")
end
end
end
helpers do
def is_user?
@user != nil
end
end
before do
@user = User.get(session[:user_id])
end
get "/" do
"Hello, anonymous."
end
get "/protected", :auth => :user do
"Hello, #{@user.name}."
end
post "/login" do
session[:user_id] = User.authenticate(params).id
end
get "/logout" do
session[:user_id] = nil
end
end
对于您想要保护的任何路由,请添加:auth => :user
的条件,如/protected
上面的例子。这将调用auth
方法,通过以下方式向路线添加条件condition
.
该条件称为is_user?
方法,已被定义为助手。该方法应返回 true 或 false,具体取决于会话是否包含有效的帐户 ID。 (像这样动态调用帮助程序可以轻松添加具有不同权限的其他类型的用户。)
最后,before
处理程序设置一个@user
每个请求的实例变量,例如在每个页面顶部显示用户名。您还可以使用is_user?
视图中的帮助程序来确定用户是否已登录。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)