Beispiel #1
0
 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('メールアドレスはすでに登録されています。')
Beispiel #2
0
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)
Beispiel #3
0
 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('メールアドレスはすでに登録されています')
Beispiel #4
0
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)
Beispiel #5
0
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)
Beispiel #6
0
 def validate_email(self, field):
     if not User.select_user_by_email(field.data):
         raise ValidationError('そのメールアドレスは存在しません')