[英]Update the password if the user has forgotten while Login-in, Python Flask
[英]Python Flask Change Password Login Form
我創建了一個 Python Flask 網站,其中包含登錄表單和注冊表單。 這兩個都有效,當用戶注冊時,他們的 email、名稱和密碼(sha256 哈希)存儲在 sqlite 數據庫中。 我現在需要使用 flask_change_password 庫來創建一個允許用戶更改密碼的表單,而我正在努力解決這個問題。
首先,我使用 PyCharm 並為我的環境安裝了 flask-change-password 但是當我from flask_change_password import ChangePassword
添加這一行時,我得到:
from flask_change_password import ChangePassword
ModuleNotFoundError: No module named 'flask_change_password'
我不明白這一點,因為我確實在我的環境中安裝了它。 我也嘗試安裝 pip pip install flask-change-password
來解決錯誤但沒有成功。
我的第二個問題是我不知道我應該在哪里實現或如何實現 change_password 表單或如何為特定用戶更改某個密碼。
這是我的注冊和登錄授權碼:
from flask import Blueprint, render_template, redirect, url_for, request, flash
from flask_change_password import ChangePasswordForm
from flask_login import login_user, login_required, logout_user
from sqlalchemy.sql.functions import current_user
from werkzeug.security import generate_password_hash, check_password_hash
from .models import User
from . import db
auth = Blueprint('auth', __name__)
@auth.route('/login')
def login():
return render_template('login.html')
@auth.route('/signup')
def signup():
return render_template('signup.html')
@auth.route('/signup', methods=['POST'])
def signup_post():
email = request.form.get('email')
name = request.form.get('name')
password = request.form.get('password')
user = User.query.filter_by(email=email).first() # check to see if user already exists
if user: # if a user is found, we want to redirect back to signup page so user can try again
flash('email address already exists. please login with your email.')
return redirect(url_for('auth.signup'))
new_user = User(email=email, name=name, password=generate_password_hash(password, method='sha256'))
# add the new user to the database
db.session.add(new_user)
db.session.commit()
return redirect(url_for('auth.login'))
@auth.route('/login', methods=['POST'])
def login_post():
email = request.form.get('email')
password = request.form.get('password')
remember = True if request.form.get('remember') else False
user = User.query.filter_by(email=email).first()
if not user or not check_password_hash(user.password, password):
flash('Please check your login details and try again.')
return redirect(url_for('auth.login')) # if the user doesn't exist or password is wrong, reload the page
login_user(user, remember=remember)
return redirect(url_for('main.profile'))
@auth.route('/logout')
@login_required
def logout():
logout_user()
return render_template('goodbye.html')
我的初始化代碼:
from flask_sqlalchemy import SQLAlchemy
from flask_change_password import ChangePassword
db = SQLAlchemy()
def create_app():
app = Flask(__name__)
app.config['SECRET_KEY'] = 'UMGC-SDEV300-Key'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///db.sqlite'
# app.secret_key = os.urandom(20)
# flask_change_password = ChangePassword(min_password_length=10, rules=dict(long_password_override=2))
# flask_change_password.init_app(app)
db.init_app(app)
login_manager = LoginManager()
login_manager.login_view = 'auth.login'
login_manager.init_app(app)
from .models import User
@login_manager.user_loader
def load_user(user_id):
return User.query.get(int(user_id))
from .auth import auth as auth_blueprint
app.register_blueprint(auth_blueprint)
from .main import main as main_blueprint
app.register_blueprint(main_blueprint)
return app
如您所見,我正在導入flask_change_password
模塊ChangePasswordForm
但導入失敗?
我最終通過從 pip3 的默認實例中刪除 flask 解決了這個問題。 我還從 pip3 的默認實例中刪除了 flask-security。 然后我在 venv 中重新安裝了這些模塊中的每一個,一切正常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.