So I was using flask_login for my login system on my mac, and I seem to have run into a problem. When I ran the code, it says I have not set my secret key even if I had done so.
My code was:
from flask import Flask, render_template, request, session, redirect, url_for, jsonify
from flask_session import Session
from flask_login import LoginManager, login_user,logout_user, login_required, current_user
from models.model import *
from sqlalchemy import or_, and_
app = Flask(__name__)
app.secret_key = "<Some secret key>"
app.config["SQLALCHEMY_DATABASE_URI"] = '<Some Uri>'
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
db.init_app(app)
Session(app)
login_manager = LoginManager()
login_manager.login_view = 'index'
login_manager.init_app(app)
@app.route("/")
def index():
if current_user.is_authenticated:
return render_template("home.html")
return render_template("login.html", tip="You have to log in first.")
@login_manager.user_loader
def load_user(user_id):
return User.query.get(int(user_id))
@app.route("/login", methods=['POST'])
def verif():
""" Gets name and password from form """
username = request.form.get("username")
password = request.form.get("password")
""" Checks user and password. """
userpassCheck = User.query.filter(and_(User.username == username, User.password == password)).first()
if not userpassCheck:
return render_template("index.html", tip="Incorrect Username or Password.")
login_user(userpassCheck)
return redirect(url_for('index'))
if __name__ == '__main__':
app.run(debug=True, use_reloader=True)
The whole error traceback was:
Traceback (most recent call last):
File "/Users/scythia/Desktop/Project1/venv/lib/python3.7/site-packages/flask/app.py", line 2464, in __call__
return self.wsgi_app(environ, start_response)
File "/Users/scythia/Desktop/Project1/venv/lib/python3.7/site-packages/flask/app.py", line 2450, in wsgi_app
response = self.handle_exception(e)
File "/Users/scythia/Desktop/Project1/venv/lib/python3.7/site-packages/flask/app.py", line 1867, in handle_exception
reraise(exc_type, exc_value, tb)
File "/Users/scythia/Desktop/Project1/venv/lib/python3.7/site-packages/flask/_compat.py", line 39, in reraise
raise value
File "/Users/scythia/Desktop/Project1/venv/lib/python3.7/site-packages/flask/app.py", line 2447, in wsgi_app
response = self.full_dispatch_request()
File "/Users/scythia/Desktop/Project1/venv/lib/python3.7/site-packages/flask/app.py", line 1952, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/Users/scythia/Desktop/Project1/venv/lib/python3.7/site-packages/flask/app.py", line 1821, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/Users/scythia/Desktop/Project1/venv/lib/python3.7/site-packages/flask/_compat.py", line 39, in reraise
raise value
File "/Users/scythia/Desktop/Project1/venv/lib/python3.7/site-packages/flask/app.py", line 1950, in full_dispatch_request
rv = self.dispatch_request()
File "/Users/scythia/Desktop/Project1/venv/lib/python3.7/site-packages/flask/app.py", line 1936, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/Users/scythia/Desktop/Project1/application.py", line 54, in verif
login_user(userpassCheck)
File "/Users/scythia/Desktop/Project1/venv/lib/python3.7/site-packages/flask_login/utils.py", line 170, in login_user
session['_user_id'] = user_id
File "/Users/scythia/Desktop/Project1/venv/lib/python3.7/site-packages/werkzeug/local.py", line 350, in __setitem__
self._get_current_object()[key] = value
File "/Users/scythia/Desktop/Project1/venv/lib/python3.7/site-packages/flask/sessions.py", line 103, in _fail
"The session is unavailable because no secret "
RuntimeError: The session is unavailable because no secret key was set. Set the secret_key on the application to something unique and secret.
My expectations for the code was for it to be completely able to run. I haven't included the two HTML files because I think it is not related. I can add it if you think it is.
Using: Python 3.7.7; Flask 1.1.2;
As @Harmandeep Kalsi said in the comments, I added app.config['SESSION_TYPE']
and it worked.