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

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

相关截图:

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

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

相关代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 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
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    # 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下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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