為何用admin的密碼無法登陸?

為何用admin的密碼無法登陸?

相关截图:

https://img1.sycdn.imooc.com//climg/62b1c5a5098f487e02790282.jpg

https://img1.sycdn.imooc.com//climg/62b1c5c40936baa705050070.jpg

相关代码:

# coding:utf-8

import mysql.connector.pooling

# 創立為私有變量, 使參數僅能被此對象調用
# 在mySQL8.0預設caching_sha2_password加密,但套件不支援,所以必須加上一行把預設加密改為mysql_native_password
__config = {
    'host': 'localhost',
    'port': 3306,
    'user': 'root',
    'password': 'my_password',
    'database': 'vega',
    'auth_plugin': 'mysql_native_password'
}

try:
    pool = mysql.connector.pooling.MySQLConnectionPool(
        **__config,
        pool_size=10
    )
except Exception as e:
    print(e)

會不會是因為連接方式加上了'auth_plugin': 'mysql_native_password'?

這是網上的方法解決了我連接池的問題 

當時連接池報錯:Authentication plugin 'caching_sha2_password' is not supported


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学,你好!登陆失败是admin用户没有登录成功,同学可以看下login()函数中执行sql语句后是否可以得到相应的数据。可以在login()中打印下count的值。

https://img1.sycdn.imooc.com//climg/62b2761f09657d9309920464.jpg

若还是有问题,同学可将这部分代码以复制粘贴的形式提供下

祝学习愉快!

  • 精慕门_learner 提问者 #1
    # coding:utf-8
    
    # 將對數據庫的操作都放入同一個對象
    
    from db.mysql_db import pool # 引用連接池
    
    class UserDao:
        # 驗證用戶登錄
        def login(self, username, password):
            try:  # 因為都是查詢語句, 就不須事務管理
                con = pool.get_connection()
                cursor = con.cursor()
                # 驗證帳密: 搜尋數據庫中有無匹配帳密, 若無, 則登錄失敗
                # 另外, 無須擔心數據量過大, sql必須先匹配username才會進行解密
                sql = 'SELECT COUNT(*) FROM t_user WHERE username=%s'\
                'AND AES_DECRYPT(UNHEX(password), "HelloWorld")=%s'
                print(sql)
                cursor.execute(sql, (username, password))
                num = cursor.fetchone()[0]  # 因為不管有幾個匹配帳密, 返回的都是數字而已
                return True if num == 1 else False  # 三元運算符
            except Exception as e:
                print(e)
            finally:
                if 'con' in dir():  # 因為需要多次操作, 每一次用完都必須歸還連接讓下一個sql使用
                    con.close()
    
        # 查詢用戶身分 -將user表與role表連接
        def search_user_role(self, username):
            try:
                con = pool.get_connection()
                cursor = con.cursor()
                sql = 'SELECT r.role FROM t_user u JOIN t_role r ON u.role_id=r.id WHERE u.username=%s'
                sql_1 = 'CREATE TABLE t_user_new LIKE t_user'
                cursor.execute(sql, (username,))
                role = cursor.fetchone()[0]
                return role
            except Exception as e:
                    print(e)
            finally:
                # dir() 函数的作用是返回当前范围(当前模块)内的变量、方法和定义的类型列表获得的属性列表。
                if 'con' in dir():
                    con.close()


    2022-06-22 10:19:08
  • 好帮手慕美 回复 提问者 精慕门_learner #2

    同学,你好!在验证方法的sql语句中对传入的password进行了解密,而数据库中对应的密码并没有加密,因此登录不成功。

    https://img1.sycdn.imooc.com//climg/62b28053094f226e08110117.jpg

    https://img1.sycdn.imooc.com//climg/62b2813209ae60b104690066.jpg

    可以先删掉数据库中的admin用户,在navicat是使用

    INSERT INTO t_user(username,password,email,role_id) VALUES

    ('admin',HEX(AES_ENCRYPT('123456','HelloWorld')),'3243@qq.com',1)插入密码加密后的用户,再重新执行登录功能,看是否可以

    祝学习愉快!

    2022-06-22 10:41:00
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星

相似问题

登录后可查看更多问答,登录/注册

请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师