And*_*Vos 38 ruby forms-authentication sinatra
我正忙着将一个非常小的Web应用程序从ASP.NET MVC 2移植到Ruby/Sinatra.
在MVC应用程序中,当用户登录对数据库进行了正确验证时,FormsAuthentication.SetAuthCookie用于设置持久性cookie.
我想知道在Sinatra中相应的Forms身份验证是什么?所有的身份验证框架看起来都非常笨重,并不是我真正想要的.
Tod*_*ell 76
这是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
Run Code Online (Sandbox Code Playgroud)
对于要保护的任何路由,请向其添加:auth => :user
条件,如上/protected
例所示.这将调用该auth
方法,该方法为路径添加条件condition
.
该条件调用该is_user?
方法,该方法已被定义为帮助程序.该方法应返回true或false,具体取决于会话是否包含有效的帐户ID.(像这样动态调用帮助程序可以很容易地添加具有不同权限的其他类型的用户.)
最后,before
处理程序@user
为每个请求设置一个实例变量,例如在每个页面的顶部显示用户名.您还可以is_user?
在视图中使用帮助程序来确定用户是否已登录.
Ral*_*eon 30
Todd的答案对我不起作用,我在Sinatra的常见问题解答中找到了一个更简单的一次性简单验证解决方案:
require 'rubygems'
require 'sinatra'
use Rack::Auth::Basic, "Restricted Area" do |username, password|
[username, password] == ['admin', 'admin']
end
get '/' do
"You're welcome"
end
Run Code Online (Sandbox Code Playgroud)
我想我会分享它,以防万一有人徘徊这个问题,需要一个非持久的解决方案.
我已经找到了这个教程和存储库的完整示例,它对我来说很好
https://sklise.com/2013/03/08/sinatra-warden-auth/
https://github.com/sklise/sinatra-warden-example
归档时间: |
|
查看次数: |
27929 次 |
最近记录: |