sinatra制作简易登录页面

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中的变量赋值,比如:


ttt.c

<% str = "" File.open(".ttt.c") do |file| while line = file.gets  str += line  str += "
" 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的内容如下:

Name: Password:
就是定义了一个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)