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 }