当前位置: 首页 > 知识库问答 >
问题:

网状物py用户身份验证与PostgreSQL数据库示例

郗浩
2023-03-14

我试图从web上复制并使用示例“PostgreSQL数据库的用户身份验证”。这是一本很棒的食谱。我不明白为什么会出现以下错误。

>

  • at/login“ThreadedDict”对象没有“login”属性

    at/login“ThreadedDict”对象没有属性“privilege”

    这是针对第二个错误输出到终端的错误。(第一个几乎相同)

    Traceback (most recent call last):
      File "/usr/local/lib/python2.7/dist-packages/web.py-0.37-py2.7.egg/web/application.py", line 239, in process
        return self.handle()
      File "/usr/local/lib/python2.7/dist-packages/web.py-0.37-py2.7.egg/web/application.py", line 230, in handle
        return self._delegate(fn, self.fvars, args)
      File "/usr/local/lib/python2.7/dist-packages/web.py-0.37-py2.7.egg/web/application.py", line 420, in _delegate
        return handle_class(cls)
      File "/usr/local/lib/python2.7/dist-packages/web.py-0.37-py2.7.egg/web/application.py", line 396, in handle_class
        return tocall(*args)
      File "/home/erik/Dropbox/Python/Web.py/Code.py", line 44, in GET
        render = create_render(session.privilege)
      File "/usr/local/lib/python2.7/dist-packages/web.py-0.37-py2.7.egg/web/session.py", line 71, in __getattr__
        return getattr(self._data, name)
    AttributeError: 'ThreadedDict' object has no attribute 'privilege'
    
    127.0.0.1:36420 - - [25/Aug/2012 01:12:38] "HTTP/1.1 GET /login" - 500 Internal Server Error
    
    

    这是我的密码。py文件。基本上都是从烹饪书上剪下来的。我尝试将所有的类和def放在主代码之上。正如另一篇文章中提到的,我也尝试过用sudo启动python。

    import web
    
    class index:
        def GET(self):
            todos = db.select('todo')
            return render.index(todos)
    
    class add:
        def POST(self):
            i = web.input()
            n = db.insert('todo', title=i.title)
            raise web.seeother('/')
    
    def logged():
        return False  #I added this to test error #1, Now I get error #2
        #if session.login==1:
        #    return True
        #else:
        #    return False
    
    def create_render(privilege):
        if logged():
            if privilege == 0:
                render = web.template.render('templates/reader')
            elif privilege == 1:
                render = web.template.render('templates/user')
            elif privilege == 2:
                render = web.template.render('templates/admin')
            else:
                render = web.template.render('templates/communs')
        else:
            render = web.template.render('templates/communs')
        return render
    
    
    
    class Login:
    
        def GET(self):
            if logged():
                render = create_render(session.privilege)
                return '%s' % render.login_double()
            else:
                # This is where error #2 is
                render = create_render(session.privilege)
                return '%s' % render.login()
    
        def POST(self):
            name, passwd = web.input().name, web.input().passwd
            ident = db.select('users', where='name=$name', vars=locals())[0]
            try:
                if hashlib.sha1("sAlT754-"+passwd).hexdigest() == ident['pass']:
                    session.login = 1
                    session.privilege = ident['privilege']
                    render = create_render(session.privilege)
                    return render.login_ok()
                else:
                    session.login = 0
                    session.privilege = 0
                    render = create_render(session.privilege)
                    return render.login_error()
            except:
                session.login = 0
                session.privilege = 0
                render = create_render(session.privilege)
                return render.login_error()
    
    
    class Reset:
    
        def GET(self):
            session.login = 0
            session.kill()
            render = create_render(session.privilege)
            return render.logout()
    
    
    
    
    #web.config.debug = False
    
    render = web.template.render('templates/', base='layout')
    urls = (
        '/', 'index',
        '/add', 'add',
        '/login', 'Login',
        '/reset', 'Reset'
        )
    
    app = web.application(urls, globals())
    db = web.database(dbn='postgres', user='hdsfgsdfgsd', pw='dfgsdfgsdfg', db='postgres', host='fdfgdfgd.com')
    
    store = web.session.DiskStore('sessions')
    
    # Too me, it seems this is being ignored, at least the 'initializer' part
    session = web.session.Session(app, store, initializer={'login': 0, 'privilege': 0})
    
    
    
    if __name__ == "__main__": app.run()
    
  • 共有1个答案

    应煌
    2023-03-14

    好吧,我能找出我做错了什么。所有的新手和学习过程的所有部分。这段代码现在可以正常工作了。我被卡住的部分现在正在工作。在代码中查看我的注释

    谢谢

    import web
    
    web.config.debug = False
    
    render = web.template.render('templates/', base='layout')
    urls = (
        '/', 'index',
        '/add', 'add',
        '/login', 'Login',
        '/reset', 'Reset'
        )
    
    app = web.application(urls, globals())
    db = web.database(blah, blah, blah)
    
    store = web.session.DiskStore('sessions')
    session = web.session.Session(app, store, initializer={'login': 0, 'privilege': 0})
    
    
    class index:
        def GET(self):
            todos = db.select('todo')
            return render.index(todos)
    
    class add:
        def POST(self):
            i = web.input()
            n = db.insert('todo', title=i.title)
            raise web.seeother('/')
    
    def logged():
        if session.get('login', False):
            return True
        else:
            return False
    
    def create_render(privilege):
        if logged():
            if privilege == 0:
                render = web.template.render('templates/reader')
            elif privilege == 1:
                render = web.template.render('templates/user')
            elif privilege == 2:
                render = web.template.render('templates/admin')
            else:
                render = web.template.render('templates/communs')
        else:
                    ## This line is key, i do not have a communs folder, thus returning an unusable object
            #render = web.template.render('templates/communs')  #Original code from example
    
            render = web.template.render('templates/', base='layout')
        return render
    
    
    
    class Login:
    
        def GET(self):
            if logged():
                            ## Using session.get('something') instead of session.something does not blow up when it does not exit 
                render = create_render(session.get('privilege'))
                return '%s' % render.login_double()
            else:
                render = create_render(session.get('privilege'))
                return '%s' % render.login()
    
        def POST(self):
            name, passwd = web.input().name, web.input().passwd
            ident = db.select('users', where='name=$name', vars=locals())[0]
            try:
                if hashlib.sha1("sAlT754-"+passwd).hexdigest() == ident['pass']:
                    session.login = 1
                    session.privilege = ident['privilege']
                    render = create_render(session.get('privilege'))
                    return render.login_ok()
                else:
                    session.login = 0
                    session.privilege = 0
                    render = create_render(session.get('privilege'))
                    return render.login_error()
            except:
                session.login = 0
                session.privilege = 0
                render = create_render(session.get('privilege'))
                return render.login_error()
    
    
    class Reset:
    
        def GET(self):
            session.login = 0
            session.kill()
            render = create_render(session.get('privilege'))
            return render.logout()
    
    
    if __name__ == "__main__": app.run()
    
    
     类似资料:
    • 于是我在这里看到:https://firebase . Google . com/docs/auth/web/account-linking # link-auth-provider-credentials-to-a-user-account现在可以在Firebase中链接用户账号了。我还看到Firebase提供了匿名认证的功能,它为一个用户创建一个用户会话,不需要任何凭证。 在我们的应用程序中,

    • 问题内容: 是否存在node.js的现有用户身份验证库?特别是,我正在寻找可以对用户进行密码身份验证的东西(使用自定义后端身份验证数据库),并将该用户与会话相关联。 在编写身份验证库之前,我认为我会看看人们是否知道现有的库。通过Google搜索找不到任何明显的内容。 -Shreyas 问题答案: 看起来连接中间件的connect-auth插件正是我所需要的:http : //wiki.github

    • 我正在尝试制作一个适配器,它将显示给listview实时数据库内容。 带适配器返回null得身份验证: 类: 请求布局:

    • 我是Spring安全的新手,我想用数据库验证用户。我已经用jdbc创建了一个登录页面和一个身份验证提供程序,它检查用户是否存在于数据库中。但是我的代码没有这样做的问题是,它允许所有用户登录!我的代码怎么了?谢谢你的帮助。 这是我的安全会议。xml:

    • 继续我先前的问题。我正在研究CAS 5,以便根据需要进行修改。在CAS教程的帮助下,我现在已经完成了自定义身份验证。现在,我向pom添加了以下依赖项。xml,通过以下链接连接到数据库。 并在应用程序中添加了数据库身份验证属性。属性 但这不起作用意味着 类型org.apereo.cas.configuration.model.support.jdbc.QueryJdbcAuthentiationPr

    • 我已经开始开发一个由Google的Firebase服务提供支持的应用程序。我很好奇数据传输在Auth和数据库服务中是否安全。如果没有,我是否可以阅读任何材料来源以实现加密? 非常感谢。