2013-07-13 26 views
0

我是新的python和剛開始學習,我想創建一個簡單的腳本來運行程序通過驗證用戶,有效或不... 主要問題,我面臨的是我有一個文件「用戶」,其中我提到所有有效的用戶, 所以我需要一個程序,搜索用戶在「用戶」文件中給出的輸入,如果發現然後繼續否則「身份驗證失敗」 我所嘗試的是。 ..用戶認證腳本使用python運行程序

FP =打開( 「用戶」, 「R」)

用於線在fp.readlines():

if "michel" in line : # user michel is available in users file 
    print "true" 
else : 
    print "false" 

它的工作,打印'真',因爲米歇爾在文件..但在用戶輸入「麥克風」的情況下..也打印真正......所以將是什麼解決方案...

回答

0

您可以使用再以確保整條線路匹配:

import re 

    fp = open("users", "r") 
    for line in fp.readlines(): 
     if re.match('^michel$', line, re.I): 
      print "true" 
     else : 
      print "false" 
1

對於初學者來說,爲了安全起見,最好使用os.getlogin()來確定用戶的登錄名,而不是提示用戶鍵入他們的用戶名。這至少可以保證用戶通過某種認證機制登錄進入系統,這意味着他們有一個已知的一致的用戶名&。

所以,如果你想變成一個功能,你可以寫:

def is_valid_user(username): 
    fp = open("users", "r") 
    for line in fp.readlines(): 
     if username in line: 
     fp.close() 
     return True 
    fp.close() 
    return False 

然後,您可以通過調用該函數:

import os 
is_valid = is_valid_user(os.getlogin()) 
if is_valid: 
    print("valid user") 
else: 
    print("invalid user") 

爲增加安全性的一些建議,現在和未來:

  1. 將您的「用戶」文件修改爲包含名稱,例如「:jonesj:」而不是包含分隔符的名稱比「jonesj」和搜索":" + username + ":" in line,這將避免在用戶「jones」當前登錄並且用戶名「jonesj」在您的「用戶」文件但「瓊斯」不是的情況下出現誤報,並且您錯誤地標識「瓊斯「作爲授權用戶(因爲」瓊斯「是字符串」jonesj「的子集)。
  2. 確保您的「用戶」文件的權限設置爲只讀,以便用戶無法將其用戶名添加到文件以授予他們自己的權限。
  3. 在將來的某個時候,您可能會考慮使用LDAP或Kerberos服務器或其他更正式的身份驗證機制,而不是「用戶」文件。有相當多的身份驗證後端服務器都有很好的Python客戶端庫。