sinatra制作简易登录页面

Ruby自动化项目实战:从测试到部署全流程解析 Ruby是一种动态、面向对象的脚本语言,以其简洁优雅的语法和高度的可读性著称。它不仅支持多种编程范式,还拥有强大的元编程能力,使开发者能够编写出灵活且易于维护的自动化脚本。Ruby的丰富标准库和活跃的Gem生态系统(如Cucumber、Selenium、RSpec等)为测试自动化、Web开发、API服务构建提供了坚实基础。此外,Ruby具备良好的跨平台兼容性,可在Windows、Linux、macOS等系统上无缝运行。 阅读详情

sinatra 是基于ruby语言实现的http路由框架,通过sinatra可以高效率实现web框架,要想了解sinatra的流程,可以参考

http://wangsheng2008love.blog.163.com/blog/static/7820168920133145425544/

http://www.sinatrarb.com/intro-zh.html

本文中用到了erb模板,其风格与php类似,就是在html中通过嵌入<? ... ?> 执行ruby语句、<?= ...?>执行ruby语句并给html中的变量赋值,比如:

<meta http-equiv="refresh" content="10">
<h2>ttt.c</h2>
<%
str = ""
File.open(".ttt.c") do |file|
while line = file.gets
 str += line
 str += "<br>"
end
file.close();
end
%>

<%= str %>
这里实现的是读取文件内容,并定时10秒进行刷新


好了废话不多说了,下面开始介绍使用sinatra框架 + erb模板,开发登录页面login.rb的过程,lgoin.rb文件的内容如下:

require 'rubygems' #注意:如果你的Ruby版本低于1.9,需要在代码第一行添加:"require 'rubygems'"
require 'sinatra'
require 'sass'
require 'digest/md5'

use Rack::Session::Pool, :expire_after => 120


configure do
  enable :sessions
  set :username, 'frank'
  set :passwordmd5, '0efe415c937f6858550a6378f4f3f374'  #'sinatra'
end

get '/' do
    if session[:admin] == true
        redirect to('start')
    else
        redirect to('login')
    end
end

get '/login' do
  erb :login
end

post '/login' do
    if params[:username] == settings.username && Digest::MD5.hexdigest(params[:password]) == settings.passwordmd5
        session[:admin] = true
        redirect to('start')
    else
        erb :login
    end
end

get '/start' do
    halt(401,'Not Authorized') unless session[:admin]
    erb :start
end

get '/logout' do
    session.clear
    redirect to('/login')
end
其中,use Rack::Session::Pool, :expire_after => 120  表示,session的过期时间为120秒,即登陆了成功后,120秒内无操作,session将无效

然后:

configure do
  enable :sessions
  set :username, 'frank'
  set :passwordmd5, '0efe415c937f6858550a6378f4f3f374'
end
表示,启用session功能,并将用户名固定为frank,密码的MD5值

之后就是对http请求进行路由,其中get、post都是指http的请求类型。比如,

get '/' do
    if session[:admin] == true
        redirect to('start')
    else
        redirect to('login')
    end
end
表示sinatra收到针对根的get请求后,会读取session中保存的admin,如果为true,说明已经成功登录,就会将请求直接路由到start页面,否则将会路由到login页面。

get '/login' do
  erb :login
end
表示收到对login页面的请求后,将显示erb模板login的内容,即login.erb文件。通常模板文件都会保存在views目录下,login.erb的内容如下:

<form action="/login" method="post">
  Name: <input type="text" name="username" />
  Password: <input type="password" name="password" />
  <input type="submit" value="Log in" />
</form>
就是定义了一个username文本框、password密码框、一个提交按钮。按下这个按钮就会触发post操作
post '/login' do
    if params[:username] == settings.username && Digest::MD5.hexdigest(params[:password]) == settings.passwordmd5
        session[:admin] = true
        redirect to('start')
    else
        erb :login
    end
end
这里针对login页面的post操作进行处理,判断用户名、密码的md5是否验证通过,如果验证通过则将session中的admin置为true,然后重定向页面到start,否则将重新显示登录页面。

get '/start' do
    halt(401,'Not Authorized') unless session[:admin]
    erb :start
end
浏览器请求start页面,如果没有登录成功,会触发401错误,并显示Not Authorized


执行ruby -o 0.0.0.0 -p 80 login.rb命令,在浏览器中输入服务器的ip,就可以开始登录页面了



sinatra_simple_login:使用 sinatra 登录的简单示例 简单登录 如果失败尝试超过 5 次,这是使用管理员、bcrypt 和阻止用户登录 sinatra 的简单示例。 为电子邮件配置了默认用户: 和密码:123 怎么跑 $ bundle $ rackup 添加新用户 $ bundle console $ require ' ./model ' $ User.create ! (email: ' john@exemple.org ' , password: ' test ' ) 解锁用户 $ bundle console $ require ' ./model ' $ u = User.first(:email = > ' john@exemple.org ' ).update(:blocked_user = > false) 立即下载

相关推荐

authlane:Sinatra 的简单用户身份验证和角色

授权通道 AuthLane Sinatra 扩展允许通过支持不同用户角色和通过 Cookie 自动登录的简单用户身份验证。 它公开了 Helper 方法来判断哪些路由受到保护或参与了身份验证过程。 实际的身份验证逻辑(策略)由应用程序使用此扩展提供的命名空间 DSL 定义,而通用扩展配置则使用 Sinatra 的set方法处理,这将在下面更详细地描述。 安装 获得宝石: gem install authlane 或者让 Bundler 来做这项工作: # Gemfile gem 'authlane' AuthLane为经典风格的应用程序使用标准的 Sinatra 扩展格式: require 'sinatra' require 'sinatra/authlane' get '/user' do protect! # Application stuff for sign

如何配置mdv:从基础设置到高级自定义的完整指南

**mdv** (Terminal Markdown Viewer) 是一款强大的终端Markdown查看器,让你在命令行中也能享受彩色渲染的Markdown文档阅读体验。😊 无论你是开发者、文档编写者还是终端爱好者,掌握mdv的配置技巧都能大幅提升你的工作效率和阅读舒适度。 ## 📦 快速安装mdv终端Markdown查看器 安装mdv非常简单,只需一条命令: ```bash pip

gitblog_00767的博客 349

sinatra-auth:用于用户身份验证的简单Sinatra样板

sinatra-auth 用于用户身份验证的简单Sinatra样板。

sinatra 基本用法

sinatra 不同于rails,是一个轻量级的ruby 框架,非常轻巧灵活。基本用法如官网所述:#!/usr/bin/env ruby require 'sinatra' get '/frank-says' do   'Put this in your pipe &amp; smoke it!' end默认会监听在127.0.0.1:4567 ,可以稍加配置,如下:#!/usr/bin/env...

weixin_33717117的博客 1088

避坑指南:中国地面气候日值数据集(V3.0)处理中的常见错误与解决方案

本文详细解析了中国地面气候日值数据集(V3.0)处理中的常见错误与解决方案,包括数据清洗、特征值解码、时间序列处理和质量控制等关键步骤。通过Python实战代码示例,帮助研究者高效处理这一包含全国699个气象站多要素日值数据的数据集,避免常见陷阱,提升气候变化研究和农业气象分析的准确性。

xray4的博客 1026

四足机器人关节电机FOC控制实战:从磁编码器校准到SVPWM调试避坑指南

本文详细解析了四足机器人关节电机FOC控制实战,涵盖磁编码器校准、电流环调试和SVPWM波形优化等关键环节。通过MIT Cheetah案例展示如何解决21倍电气误差问题,并提供相序自动校正、PI参数整定等实用代码片段,帮助工程师避开永磁同步电机(PMSM)控制中的常见陷阱。

weixin_29281915的博客 489

ruby sinatra_在Ruby中使用Sinatra

ruby sinatra In the previous article in this series of articles, we talked about what Sinatra is. In this article, we'll look at some real functional Sinatra code, touching on a few Sinatra features, ...

cumao2792的博客 695

保姆级教程:在RK3568上搞定PR2100K+GC2385双摄(从DTS配置到HAL层补丁)

本文详细介绍了在RK3568平台上调试PR2100K+GC2385双摄系统的完整流程,从DTS配置到HAL层补丁。涵盖硬件连接、媒体控制器拓扑验证、Camera3配置、HAL层特殊补丁及性能优化等关键步骤,帮助开发者快速解决双摄调试中的常见问题,提升嵌入式视觉系统开发效率。

weixin_28724661的博客 195

ruby sinatra 简单例子

server.rb require 'sinatra' #前置过滤器 before do puts 'before process' end #后置过滤器 after do puts 'after process' end #找不到页面调用的逻辑 not_found do '404 you know!' end get '/' do 'Hello World' end

走马行酒醴,驱车布鱼肉 2485

Java后端开发实战:手把手教你用e签宝API搞定电子合同签署(附完整代码)

本文详细解析了Java后端开发中如何通过e签宝API实现电子合同签署的全流程,包括环境配置、核心架构设计、Token管理、签署流程实现及回调处理等关键环节。通过完整的代码示例和最佳实践,帮助开发者高效集成电子签名服务,提升企业数字化转型效率。

weixin_42662293的博客 530

【软件系统架构】系列六:系统工程

系统工程是一种跨学科方法论,用于分析、设计、集成和管理复杂系统的全生命周期。其核心特点包括系统性思维、全周期管理、跨学科协作和需求导向。主流采用V模型生命周期,涵盖需求分析、系统设计、实现、测试验证及运维退役等阶段。核心工作方法包括需求工程、系统建模、接口设计、风险管理等。系统工程与项目管理协同,分别侧重技术实现和进度资源管理。应用领域覆盖航天军工、智能制造、智慧城市等。未来将向AI融合、数字孪生、模型驱动工程等方向发展,为复杂系统开发提供系统化协作范式。

moton2017的博客 2257

sinatra mysql 无法加载驱动错误

<br />Unable to load driver 'Mysql' (underlying error: uninitialized constant DBI::DBD::Mysql)<br /> <br />如果你已经装了mysql( MySQL API module for Ruby), dbi,那么还要看下装了dbd-mysql(mysql驱动)了没.没有的话赶快补上<br />gem install dbd-mysql

HMC20071120015的专栏 1832

芒果YOLOv11改进175:DCNv4卷积,全网首发纯Pytorch实现代码,无需cuda编译|即插即用,一键运行:高效可变形卷积网络:重新思考视觉应用的动态和稀疏算子

芒果YOLOv11改进:DCNv4卷积,全网首发纯Pytorch实现代码,无需cuda编译|即插即用,一键运行:高效可变形卷积网络:重新思考视觉应用的动态和稀疏算子

包括YOLOv5、YOLOv7、YOLOv8等模型改进 1297

推荐项目:sinatra_auth_github

推荐项目:sinatra_auth_github 项目简介 sinatra_auth_github 是一个基于 Ruby 的轻量级认证库,它可以让你快速地在 Sinatra 应用中实现 Github OAuth 身份验证。 通过使用 sinatra_auth_github,你可以轻松地集成 Github 身份验证到你的应用中,并且可以获取到用户的 Github 用户名、邮箱、头像等信息。这样...

gitblog_00003的博客 419

基于 51 单片机的智能手势控制小车设计与实现

智能手势控制小车以STC89C52RC 单片机为控制核心,通过手势识别模块采集用户手势指令,经单片机处理后驱动电机执行前进、后退、左转、右转等动作。该项目融合了传感器技术、单片机编程和电机驱动技术,具有成本低、易实现、互动性强的特点,适合作为嵌入式系统入门实践案例。本项目成功实现了基于 51 单片机的智能手势控制小车,通过 APDS-9960 模块采集手势信号,经单片机处理后驱动电机完成基本动作,验证了 “传感器 + 单片机 + 执行器” 的嵌入式系统设计思路。

weixin_42300449的博客 178

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Shield 开源项目使用教程

Shield 开源项目使用教程 1. 项目介绍 Shield 是一个轻量级的 Ruby 认证协议库,旨在简化应用程序中的认证流程。它设计简洁,代码行数少,不依赖于特定的 ORM(对象关系映射),适用于各种 Ruby 应用场景。Shield 的核心功能包括用户认证、密码加密和会话管理,适用于需要快速集成认证功能的开发者。 2. 项目快速启动 安装 首先,确保你已经安装了 Ruby 和 RubyGem...

gitblog_00954的博客 515

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

制作彪马登录页面html代码,GitHub - puma/puma: A Ruby/Rack web server built for concurrency

Puma: A Ruby Web Server Built For ConcurrencyPuma is a simple, fast, multi-threaded, and highly concurrent HTTP 1.1 server for Ruby/Rack applications.Built For Speed & ConcurrencyPuma processes re...

weixin_39928993的博客 386

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

告别账号密码管理噩梦:OmniAuth多平台认证实战指南

你是否还在为应用集成多个登录方式而头疼?用户要求用微信、QQ、GitHub账号登录,每个平台都要对接不同的API文档,处理各种加密签名和回调逻辑?OmniAuth作为一款标准化的多提供商认证解决方案,能帮你用最少的代码实现灵活的第三方登录功能。本文将从实际应用场景出发,带你掌握OmniAuth的核心原理与使用方法,解决认证流程中的常见痛点。 ## OmniAuth核心价值:为什么需要多平台认证中...

gitblog_00698的博客 1011

sqli注入

表格方法适用场景优点缺点万能密码绕过无过滤、入门题最简单、最快容易被过滤联合查询有回显、列数已知直接获取数据需要知道列数布尔盲注无回显、仅状态稳定可靠速度慢、繁琐时间盲注无任何回显最通用速度极慢报错注入页面返回错误速度快、直接依赖报错功能框架特性注入特定框架(Sinatra)可能绕过防护依赖框架实现。

skn57的博客 440

The Internet:自动化测试实战终极指南 - 掌握40+真实Web场景的完整解决方案

作为Web自动化测试开发者,你是否曾为寻找合适的测试场景而烦恼?传统的测试示例往往过于简单,难以应对真实业务中的复杂交互。The Internet项目正是为解决这一痛点而生 - 这是一个由Sauce Labs精心打造的Web测试沙箱,汇集了40多种真实世界中"丑陋"但常见的Web功能,为自动化测试提供了一站式实战平台。 ## 🔍 核心概念:为什么你需要The Internet? 在自动化测试

gitblog_00045的博客 779

为什么你需要自研单点登录?快速认识Ruby单点认证服务器rubycas-server

如果你的企业同时运行着多个Web系统,员工每天要在不同平台间反复输入账号密码,**单点登录(Single Sign-On,SSO)**几乎是必选项。本文带你快速认识 **rubycas-server**——一个用 Ruby 实现的 **CAS 协议单点认证服务器**,帮你以最低成本自研一套企业级单点登录系统。 [![CAS单点登录认证机制流程图:用户、Web应用与CAS认证服务器之间的交互过程]

gitblog_00980的博客 671

MAS 免费激活 Windows 与 Office 指南

MAS(Microsoft Activation Scripts)是一个开源激活脚本,支持 Windows 8.1/10/11 与 Office,内置 HWID、Ohook、TSforge、Online KMS 4 种激活方式,还带状态检查、版本变更与故障排查工具,照着本文 3 步即可上手。 ## 没有它的时候,激活有多麻烦 Windows 或 Office 未激活时,桌面右下角挂着水印,部分

gitblog_00054的博客 525

Crowbar裸金属即代码:声明式交付物理服务器全生命周期

裸金属即代码(Bare Metal as Code)是现代基础设施自动化的核心演进方向,它将物理服务器的BIOS配置、RAID策略、网络绑定、固件版本等硬件层状态纳入版本控制与CI/CD体系。其原理基于声明式模型与状态机驱动,通过可验证的期望状态替代脚本化命令,显著降低状态漂移风险。技术价值在于打通IaC最后一公里——让物理机具备虚拟机级别的可编程性、可测试性与可回滚性。典型应用场景包括Kubernetes边缘节点快速入网、混合云统一纳管、金融级固件合规基线部署等。本文深入解析Crowbar这一面向裸金属全

weixin_34389926的博客 333

用Sinatra编写博客应用

Sinatra是Blake Mizerany在2007年9月开发的Ruby语言的Web框架。它最突出的特点就是轻量、快速。更难能可贵的是,Sinatra的源代码只有一千多行。\在第一次接触到Sinatra的时候,我便被它深深地吸引住了。随后,我在09年3月的Shanghai on Rails活动向大家介绍了这个框架。10年8月份我有幸可以在RubyKaigi这样的全球级Ruby社区会议上作为演讲者...

cpongo5 203

ruby sinatra mysql_Ruby web微框架 – sinatra

Sinatra是一个以最小的消耗快速创建Ruby web应用的DSL。# myapp.rbrequire 'sinatra'get '/' do'Hello world!'end安装gem:gem install sinatra然后运行ruby myapp.rb推荐也运行gem install thin,如果可用的话Sinatra会优先选择thin。路由在Sinatra中,一个路由是一个HTTP方...

weixin_36212560的博客 229
上一篇: linux 内核常用数据结构及算法——list(循环双向链表)
下一篇: sinatra 上传文件实现
vah101
博客等级 码龄19年 239粉丝 397原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值