2005-04-24
[開発ログ]ログイン画面完成
ユーザー作成とユーザーログインの WEB ページができた。
これが Jewel-mmo サービスの最小構成か。
--
テンプレートはこうした。テンプレート内に含めるロジックをファイルの先頭に移動。これならこのままでもやっていけそうだ。
<% name = @cgi.params['name'].first pass = @cgi.params['pass'].first sid = nil error = nil if name begin require 'command/login.rb' raise Core_Error unless (com = Login.new(nil, name, pass)).result sid = com.result @cgi_header["cookie"] = CGI::Cookie::new({"name" => "sid", "value" => [sid]}) rescue Core_Error error = $!.inspect end end %> <html lang="ja"> <head> <meta http-equiv="Content-type" content="text/html; charset=EUC-JP"> <meta http-equiv="Content-script-type" content="text/javascript"> <title>ログイン</title> </head> <body> <h1>ログイン</h1> <% if sid %> <head><meta http-equiv="refresh" content="5;url=<%= jmp_url('usermain') %>"></head> <p>Wait or <a href="<%= jmp_url('usermain') %>">Click here!</a></p> <% else %> <% if error %> <p>Error : <%= h(error) %></p> <% end %> <form action="<%= jmp_url %>" method="post" class="login_form"> <input type="hidden" name="tmpl" value="<%= h(@tmpl) %>" /> user name : <input type="text" size="10" name="name" value="<%= h(name) %>"/> password : <input type="pass" size="10" name="pass" value="<%= h(pass) %>"/> <input type="submit" value="login" /> </form> <p><a href="<%= jmp_url('useradd') %>">ユーザー登録画面</a></p> <% end %> </body> </html>
現状のランチャーは以下。
#!/usr/bin/env ruby require 'cgi' require 'erb' include ERB::Util def jmp_url(tmpl=nil, params=nil) url = $0 url += "?tmpl=#{tmpl}" if tmpl h(url) end @cgi_header = {} @cgi = CGI.new("html3") begin $:.unshift '../core/' require 'jewelcore.rb' include JewelCore @sid = @cgi.cookies['sid'].empty? ? nil : @cgi.cookies['sid'].value.first @tmpl = @cgi.params['tmpl'].first raise @tmpl if @tmpl =~ /[^\w_-]/ html = ERB.new(File.read("./#{@tmpl}.htm")).result(binding) rescue Exception html = "<H2>Error</H2>\n#{h($!.inspect)}" html += '<PRE>' + $@.map{|s| h(s) }.join("\n") + '</PRE>' end @cgi.out(@cgi_header) { html }