gpt4 book ai didi

ruby - 如何进行真正简单的 Sinatra LDAP 身份验证?

转载 作者:数据小太阳 更新时间:2023-10-29 07:18:34 25 4
gpt4 key购买 nike

我查看了 Sinatra 文档,它们似乎只引用了 HTTP 身份验证。我正在寻找一种非常简单的方法来根据通过 LDAP 服务器授权/认证的用户来控制对路由的访问。

我已经构建了一个执行 LDAP 位的类,如果用户已成功通过身份验证则返回一个 LDAP 对象,如果没有则返回 nil:

>>DirectoryUser.authenticate('user', 'password')
#<DirectoryUser:0x007ffb589a2328>

我可以使用它来确定他们是否已成功通过身份验证。

作为下一步,我想将其拼接到一个简单的 Sinatra 应用程序中,该应用程序提供了一个用于收集 LDAP 用户和密码的表单:

require 'directoryUser'
require 'sinatra'

enable :sessions

get '/form' do
username = params[:username]
password = params[:password]
haml :form
end

然后我只想在“DirectoryUser”对象存在时允许路由:

get '/protected' do # Only if DirectoryUser object exists 
"This route is protected"
end

get '/unprotected' do
"This route is unprotected"
end

我花了几个小时试图找到这个问题的答案,但到目前为止似乎找不到任何适合我的东西。

最佳答案

我可能会选择这样的东西:

require 'directoryUser'
require 'sinatra'

enable :sessions

helpers do
def authorize!
redirect(to('/login')) unless session[:user_id]
end
end

get '/login' do
haml :login # with the login form
end

post '/login' do
user = DirectoryUser.authenticate(params[:username], params[:password])

if user
session[:user_id] = user.id
# Or: session[:logged_in] = true, depending on your needs.
redirect to('/protected')
else
redirect to('/login')
end
end

get '/protected' do
authorize!
'This route is protected'
end

get '/unprotected' do
'This route is unprotected'
end

关于ruby - 如何进行真正简单的 Sinatra LDAP 身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15830556/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com