flask 使用者註冊 密碼加密

2021-09-26 12:33:18 字數 3401 閱讀 5888

名為passport.py

依舊存在:密碼為加密以及建立使用者時沒有傳入密碼的問題。

from . import api

from ihome.utils.response_code import ret

from ihome import redis_store, db

from ihome.models import user

from sqlalchemy.exc import integrityerror

import re

@api.route("users", methods=["post"])

def register():

"""註冊 :param : 手機號,簡訊驗證碼,密碼

引數格式:json

"""# 1.接收引數

req_dict = request.get_json()

mobile = req_dict.get("mobile", "")

sms_code = req_dict.get("sms_code", "")

password = req_dict.get("password", "")

password2 = req_dict.get("password2", "")

# 校驗引數

if not all([mobile, sms_code, password]):

return jsonify(reeno=ret.paramerr, errmsg="引數不完整")

# 判斷手機號格式

if not re.match(r"1[34578]\d", mobile):

# 表示格式不對

return jsonify(errno=ret.paramerr, errmsg="手機號格式錯誤")

if password != password2:

return jsonify(errno=ret.paramerr, errmsg="兩次密碼不一致")

# 業務邏輯處理

# 從redis中取出簡訊驗證碼

try:

real_sms_code = redis_store.get("sms_code_%s" % mobile)

except exception as e:

return jsonify(errno=ret.dberr, errmsg="讀取真實簡訊驗證碼異常")

# 判斷簡訊驗證碼的是否過期

if real_sms_code is none:

return jsonify(errno=ret.paramerr, errmsg="簡訊驗證碼過期")

# 刪除redis中的簡訊驗證碼,防止重複使用校驗

try:

redis_store.delete("sms_code_%s" % mobile)

except exception as e:

# 對比判斷使用者填寫的簡訊驗證碼的正確性

if sms_code != real_sms_code:

return jsonify(errno=ret.dataerr, errmsg="簡訊驗證碼錯誤")

# 判斷使用者的手機號是否註冊過

# try:

# user = user.query.filter_by(mobile=mobile).first()

# except exception as e:

# return jsonify(errno=ret.dberr, errmsg="資料庫異常")

# else:

# if user is not none:

# return jsonify(errno=ret.dataexist, errmsg="手機號已存在")

# 儲存使用者的註冊資料到資料庫中

user = user(name=mobile, mobile=mobile)

try:

db.session.add(user)

db.session.commit()

except integrityerror as e:

# 資料庫操作錯誤後的回滾

db.session.rollback()

# 表示手機號出現了重複值,即手機號已註冊過

return jsonify(errno=ret.dataerr, errmsg="手機號已存在")

except exception as e:

# 儲存登入狀態到session中

session['name'] = mobile

session["mobile"] = mobile

session["user_id"] = user.id

# 返回結果

return jsonify(errno=ret.ok, errmsg="註冊成功")

密碼加密**

要給密碼加鹽值

鹽值:生成乙個小的隨機字串

做法:將鹽值salt和加密後的密碼password都儲存下來,

abc$sdsdsdshkjh

abc是鹽值

sdsdsdjijhjjh是加密後的密碼

我們使用flask自帶的加密和校驗的這兩個函式

from werkzeug.security import generate_password_hash

from werkzeug.security import check_password_hash

將密碼加密放到類中進行函式封裝

在models。user類中,我們進行函式封裝

def generate_password_hash(self, origin_password):

"""對密碼進行加密"""

self.pasword_hash = generate_password_hash(origin_password)

我們使用@propoty 將函式的呼叫轉換為屬性的設定

# 加上property裝飾器後,會把函式變為屬性,屬性名即為函式名

@property

def password(self):

"""讀取屬性的函式行為"""

# 函式的返回值會作為屬性值

return "***"

# 將函式變為了設定方法

@password.setter

def password(self, value):

pass

在實際應用中,我們只需要使用

user.password = password
由於密碼一般為加密字元且不能進行讀取操作,所以我們將密碼作為只允許設定的邏輯編寫

php實現使用者註冊密碼的crypt加密

一 1 conn.php mysql select db db database21 conn 選擇資料庫db database21 mysql query set names utf8 設定資料庫編碼格式utf8 2 index.php 使用者註冊 3 index ok.php include c...

flask進行使用者註冊介面處理

1 獲取到使用者寫入的username和password引數 2 將引數傳給業務函式 3 獲取到業務函式的return註冊結果 4 返還給使用者 from flask import flask 引入獲取呼叫介面傳遞的引數 from flask import request 後台處理瀏覽器跨域的包 f...

使用者密碼加密簡介

大多數開發人員使用資料庫儲存密碼,如果密碼直接以明文的形式存放在資料庫中,則系統很不安全。使用雜湊演算法可以解決這一問題。雜湊是一種單向演算法,一旦資料被抓換,將無法再獲得其原始值,可以使用雜湊演算法對密碼進行加密,然後將其儲存在資料庫中。使用者輸入密碼後,可以再次使用雜湊演算法對其進行轉換,然後將...