Flask、おそらくsessionにきちんと保存されていません
初心者です。ロリポップのレンタルサーバーを借りてFlaskでwebアプリを作ろうとしているのですが、hogehoge.comにアクセスし、ログインページに正しいメアドとパスワードを入力してもログイン処理がうまく行きません。
うまくログインできるとtop.htmlの内容が表示されるはずですが、okashii.htmlの画面が表示されます。
ちなみに、自分のパソコンのターミナルからapp.pyをpythonで実行するとうまくログインできます。
おそらくsessionに情報が保存されていないと思うのですが、どのようにすれば解決できるのか、ご教授いただけますでしょうか。まだ初めたばかりで、くだらない質問かもしれませんが、よろしくおねがします。
階層
hogehoge.com
├templates
|| login.html
|| shippai.html
|| top.html
|└ okashii.html
|app.py
|login.py
|index.cgi
└.htaccess
app.py
from flask import Flask, render_template, redirect, request
import login
import secrets
app = Flask(__name__)
secret = secrets.token_urlsafe(32)
app.secret_key = secret
#最初のログイン画面
@app.route('/')
def login():
return render_template('login.html')
#ログイン直後
@app.route('/try_login', methods=['POST'])
def try_login():
mail = request.form.get('mail','')
pw = request.form.get('pw','')
if login.try_login(mail, pw):
return redirect('/index.cgi/top')
return render_template('shippai.html')
#ログイン後のトップページ
@app.route('/top')
def top():
#ログインしてるかどうか
if not login.is_login():
return render_template('okashii.html')#これが何回やっても表示されます#
return render_template('top.html')
if __name__ == '__main__':
app.run()
login.py
from flask import session
# ログインしているか調べる
def is_login():
return 'mail' in session
# ログイン処理
def try_login(mail, pw):
# 該当ユーザーか?
if mail != 'a@gmail.com': return False
# パスワードが合っているか?
if pw != 'aaaaaaaa': return False
# ログイン処理
session['mail'] = mail
return True
index.cgi
#!/usr/local/bin/python3
from wsgiref.handlers import CGIHandler
from app import app
CGIHandler().run(app)
.htaccess
<ifmodule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}\index.cgi -f
RewriteRule ^(.*)$ $1index.cgi [L]
</ifmodule>
login.html
<!DOCTYPE html>
<html lang="ja"><head><meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, initial-scale=1.0">
<title>ログインページ</title>
</head><body><div>
<h1>ログインページ<h1>
<form action="/index.cgi/try_login" method="POST">
<legend>メールアドレスとパスワードを入力してください</legend>
<fieldset>
<ul>
<li>
<label for="mail">メールアドレス</label>
<input type="text" name="mail" id="mail">
</li>
<li>
<label for="pw">パスワード</label>
<input type="password" name="pw" id="pw">
</li>
</ul>
<button type="submit">
ログイン</button>
</fieldset>
</form>
</div></body></html>
shippai.htmlとokashii.htmlの内容はおそらく関係ありませんので省略させていただきます。
okashii.htmlが表示されるということは、おそらく、ログイン処理はうまくいっているのですが、/index.cgi/topにアクセスした際の、ログインしているかどうかの確認がうまくいっていないものと思われます。自分のパソコンのターミナルでapp.pyを実行するとうまくいくのですが、、、