2013-07-13 20 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客户端库。