質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

受付中

コアサーバーでflask-loginの機能が使えない

dabi
dabi

総合スコア2

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

1回答

0評価

0クリップ

311閲覧

投稿2022/04/17 10:56

編集2022/04/21 11:01

flask-loginでappにログイン機能を実装し、ローカル環境ではログインするとうまくいきました。しかし、コアサーバーにそれをアップロードし、そこからログインしようとするとUnauthorizedのエラーが出てしまいます。
また、ブラウザchrome以外だとユーザー新規登録の時にエラーが発生、そしてChromeでもユーザー名などを日本語にするとエラーが起きてしまいます。(ローカルでは、日本語でも問題なく登録できた。)なぜこのようなエラーが出るのかを突き止めたいです。
※追記
index.pyを編集しました。

app─┬─index.py ├─index.cgi ├─.htaccess ├─┬templates┬register.html │ │ ├login.html │ │ └myhome.html │ └static─style.css └─user.db
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ /index.cgi/$1 [QSA,L] <Files ~ "\.py$"> deny from all </Files>

index.cgi

#!/usr/local/bin/python3 from wsgiref.handlers import CGIHandler from index import app CGIHandler().run(app)

index.py

import os import random, string import math from flask import Flask, render_template, request, redirect, url_for, g, session, flash from flask_sqlalchemy import SQLAlchemy from flask_login import LoginManager, UserMixin, current_user, login_user, login_required, logout_user from werkzeug.security import generate_password_hash, check_password_hash app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///user.db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False app.config['SECRET_KEY'] = os.urandom(24) db = SQLAlchemy(app) app.config['UPLOAD_FOLDER'] = 'static/images' app.config['MAX_CONTENT_LENGTH'] = 16 * 1000 * 1000 login_manager = LoginManager() login_manager.init_app(app) class User(UserMixin, db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(50)) password = db.Column(db.String(25)) mail = db.Column(db.String(64)) msg = db.Column(db.String(500)) voting = db.Column(db.String(3)) video_query = db.Column(db.String(3)) rep = db.Column(db.Float) star = db.Column(db.Integer) def get_id(self): return self.id def is_authenticated(self): return True def is_anonymous(self): return False def is_active(self): return False class User_mail(UserMixin, db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(50)) mail = db.Column(db.String(64)) class Vote(UserMixin, db.Model): __tablename__ = "vote" id = db.Column(db.Integer, primary_key=True) voted_mail = db.Column(db.String(64)) vote_mail = db.Column(db.String(64)) class VideoVote(db.Model): id = db.Column(db.Integer, primary_key=True) video_voted_mail = db.Column(db.String(64)) video_vote_mail = db.Column(db.String(64)) class Hit(db.Model): id = db.Column(db.Integer, primary_key=True) star_mail = db.Column(db.String(64)) hit_mail = db.Column(db.String(64)) hit_id = db.Column(db.String(64)) class VideoHit(db.Model): id = db.Column(db.Integer, primary_key=True) video_star_mail = db.Column(db.String(64)) video_hit_mail = db.Column(db.String(64)) video_hit_id = db.Column(db.Integer) class ForRep(db.Model): id = db.Column(db.Integer, primary_key=True) video_star_mail = db.Column(db.String(64)) video_hit_mail = db.Column(db.String(64)) class GroupVideo(db.Model): id = db.Column(db.Integer, primary_key=True) one = db.Column(db.Integer) two = db.Column(db.Integer) three = db.Column(db.Integer) four = db.Column(db.Integer) five = db.Column(db.Integer) group_id = db.Column(db.Integer) def randomname(n): randlst = [random.choice(string.ascii_letters + string.digits) for i in range(n)] return ''.join(randlst) db.create_all() @login_manager.user_loader def load_user(user_id): return User.query.get(int(user_id)) @app.route('/') def index(): return render_template('index.html') @app.route('/register', methods=['POST', 'GET']) def register(): if request.method == "POST": username = request.form.get('name') password = request.form.get('password') mailaddress = request.form.get('mail') mailg ='@' in mailaddress mailgd = '.' in mailaddress print(mailg) if mailg == False: return redirect('/register_w3') if mailgd == False: return redirect('/register_w3') print(username + ':' + password + ':' + mailaddress) # Userのインスタンスを作成 if username == '': return redirect('/register') elif password == '': return redirect('/register') elif mailaddress == '': return redirect('/register') elif User_mail.query.filter_by(mail=mailaddress).first(): return redirect('/register') else: user = User(username=username, password=generate_password_hash(password, method='sha256'), mail=mailaddress, msg="なし", rep=4, star=0) db.session.add(user) db.session.commit() user_mail = User_mail(username=username, mail=mailaddress) db.session.add(user_mail) db.session.commit() print(mailaddress) return redirect('/login') else: return render_template('register.html') @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == "POST": username = request.form.get('name') password = request.form.get('password') # Userテーブルからusernameに一致するユーザを取得 user = User.query.filter_by(username=username).first() if user: if check_password_hash(user.password, password): login_user(user) print(current_user.username) return redirect('/myhome') else: return redirect('/login') else: return redirect('/login') else: return render_template('login.html') @app.route('/myhome') @login_required def myhome(): if VideoHit.query.filter_by(video_hit_mail=current_user.mail).first(): for i in VideoHit.query.filter_by(video_hit_mail=current_user.mail).all(): db.session.delete(i) db.session.commit() elif VideoHit.query.filter_by(video_star_mail=current_user.mail).first(): for i in VideoHit.query.filter_by(video_star_mail=current_user.mail).all(): db.session.delete(i) db.session.commit() current_user.video_query = 'off' current_user.voting = 'off' db.session.commit() blogarticles = User.query.all() votes = Vote.query.filter_by(vote_mail = current_user.mail).all() voted_mails = [] for i in votes: voted_mails.append(i.voted_mail) return render_template('myhome.html', voted_mails=voted_mails, current_user=current_user, username=current_user.username, blogarticles=blogarticles, math=math, int=int, str=str, os=os)

register.html

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>ログイン</title> <link rel="stylesheet" href="static/style.css"> </head> <body> <form action="/register" method="post"> <p class="text">ユーザーネーム</p> <textarea class="area" name="name" id=""></textarea> <p class="text">パスワード</p> <textarea class="pass area" name="password" type="password" id="" ></textarea> </br> <button>始める</button> </form> </body> </html>

login.html

myhome.html

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="static/style.css"> <title>Document</title> </head> <body> <p>ログイン成功</p> </body> </html>

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。