def validate_email(self, field): if User.select_user_by_email(field.data): raise ValidationError('メールアドレスはすでに登録されています。') if UserTempToken.email_exists(field.data): raise ValidationError('メールアドレスはすでに登録されています。') if MailResetToken.email_exists(field.data): raise ValidationError('メールアドレスはすでに登録されています。')
def forgot_password(): form = ForgotPasswordForm(request.form) if request.method == 'POST' and form.validate(): email = form.email.data # emailによってユーザーを絞り込みUserテーブルのデータを取得 user = User.select_user_by_email(email) # ユーザーが存在する場合パスワードのトークンを発行する if user: #パスワードリセットトークン情報テーブルにレコードの挿入 with db.session.begin(subtransactions=True): token = PasswordResetToken.publish_token(user) db.session.commit() # メール送信処理ここから---------------------------------------------------------- msg = Message('古書邂逅 パスワード再設定メール', recipients=[user.email]) msg.html = '<hr>【古書邂逅】 パスワード再設定のご案内<hr>\ いつも古書邂逅をご利用頂き、誠にありがとうございます。<br>\ パスワード変更のリクエストを受け付けました。<br>\ 下記ページアドレス(URL)をクリックしてパスワードの再設定を行ってください。<br>\ 再設定を行うまではパスワードは変更されません。<br>\ <br><br>\ 【こちらをクリックしてパスワードの再設定を行ってください】<br>\ {url}'.format(url=url_for( 'auth.reset_password', token=token, _external=True)) mail.send(msg) # メール送信処理ここまで---------------------------------------------------------- # デバッグ用--------------------------------------------------------------- print( f'パスワード再設定用URL: http://127.0.0.1:5000/auth/reset_password/{token}' ) # デバッグ用--------------------------------------------------------------- flash('パスワード再登録用のURLを発行しました。') return redirect(url_for('auth.login')) else: flash('存在しないユーザです。') return render_template('auth/forgot_password.html', form=form)
def validate_email(self, field): user = User.select_user_by_email(self.email.data) if user and user.User_id != int(current_user.get_id()): raise ValidationError('メールアドレスはすでに登録されています') if UserTempToken.email_exists(field.data): raise ValidationError('メールアドレスはすでに登録されています') if MailResetToken.email_exists(field.data): raise ValidationError('メールアドレスはすでに登録されています')
def login(): form = LoginForm(request.form) if request.method == 'POST' and form.validate(): user = User.select_user_by_email(form.email.data) # ユーザーが存在するかつ、ユーザーのis_activeがTrue(有効)かつ、ユーザーが入力したパスワードがユーザーのパスワードと一致する if user and user.is_active and user.validate_password( form.password.data): # ユーザーをログインさせる remember:セッションの期限が切れた後にユーザーを記憶する(ログインが維持される) login_user(user, remember=True) # request.args.get();GETリクエストで引数を受け取る next = request.args.get('next') if not next: next = url_for('route.home') return redirect(next) # ユーザーが存在しない elif not user: flash('存在しないユーザです') # ユーザーが有効でない elif not user.is_active: flash('無効なユーザです。パスワードを再設定してください') # パスワードが違う elif not user.validate_password(form.password.data): flash('メールアドレスとパスワードの組み合わせが誤っています') return render_template('auth/login.html', form=form)
def mail_password(): form = ChangePasswordForm(request.form) if request.method == 'POST' and form.validate(): # ログイン中のユーザーIDによってユーザーを取得 user = User.select_user_by_id(current_user.get_id()) pass_f = 0 mail_f = 0 # パスワードの変更フラグ if not form.now_password.data == '': now_password = form.now_password.data # 現在のパスワードチェック if user.validate_password(now_password): password = form.password.data pass_f = 1 else: flash('現在のパスワードが誤っています。') # emailの変更フラグ if not user == User.select_user_by_email(form.email.data): token = '' email = form.email.data mail_f = 1 # データベース処理 with db.session.begin(subtransactions=True): # パスワード更新 if pass_f == 1: # パスワード更新処理 user.password = password # email更新 if mail_f == 1: token = MailResetToken.publish_token(user, form.email.data) db.session.commit() print(str(mail_f) + 'メールフラグ') if mail_f == 1: # メール送信処理ここから---------------------------------------------------------- msg = Message('古書邂逅 メールアドレス変更手続きを完了してください', recipients=[email]) msg.html = '<hr>【古書邂逅】 古書邂逅会員メールアドレス変更のお知らせ<hr>\ 古書邂逅をご利用いただきありがとうございます。<br>\ 以下のURLをクリックして、メールアドレス変更手続きを完了してください<br>\ このURLの有効期限は24時間です。<br>\ <br><br>\ 【ご登録されたメールアドレス】<br>\ {email}<br>\ 【こちらをクリックして登録を完了させてください。】<br>\ {url}'.format(email=email, url=url_for('mypage.mail_reset_complete', token=token, _external=True)) mail.send(msg) # メール送信処理ここまで---------------------------------------------------------- # デバッグ用--------------------------------------------------------------- print('*' * 120) print( f'本登録URL: http://127.0.0.1:5000/mypage/mail_reset_complete/{token}' ) # デバッグ用--------------------------------------------------------------- flash(email + 'にURLを送信しました。URLをクリックするとメールアドレスの登録が完了します。') elif pass_f == 1: flash('更新に成功しました') else: flash('変更するメールアドレスまたはパスワードを入力してください') return render_template('mypage/mail_password.html', form=form)
def validate_email(self, field): if not User.select_user_by_email(field.data): raise ValidationError('そのメールアドレスは存在しません')