Google AppEngine:自定义身份验证

2023-11-22

我可以使用 Google 帐户在 AppEngine 中验证我的用户的方式简直太棒了。

但是,我需要使用我的自定义认证登录系统.

我将有一个 AppUsers 表,其中包含用户名和加密密码。

我在 gae 上读到了一些有关会话的内容,但我需要帮助来启动我的应用程序安全性。

如何跟踪经过身份验证的用户会话?设置cookie?

初学者。


你可以使用 cookie 来做到这一点......这真的不那么难。您可以使用 cookie 来跟踪用户的身份验证并将会话密钥存储在 gae 数据存储中。

有一个例子(它只是展示了基本思想,我不保证代码可以直接使用)

基本用户表:

# simply add an property to store the session key
class User(db.Model):    
    username = db.StringProperty()
    password = db.StringProperty()
    session = db.StringProperty()

登录功能

# Do the following step:
# 1. make sure user provide correct username and password
# 2. generate a random session key 
# 3. store the session key to datastore
# 4. set the session key and user name in cookie
class LoginAPI( Webapp.RequestHandler ):   
    def get(self):
        username = self.getVar( 'username', username )
        password = self.getVar( 'password', password )

        user = User.all().filter("username = ", username).get()
        password = encrypted_the_password(password) # encrypted your password with your own method!

        if user.password == password:
             # User login successfually
             session = generate_random_session_key() # generate your session key here
             user.session = session
             user.put()

             expires_time = decide_your_expires_time() # decide how long the login session is alive.
             cookie_time_format = "%a, %d-%b-%Y %H:%M:%S GMT"
             expires_datetime = datetime.datetime.fromtimestamp(expires_time)

             # set cookie as session
             self.response.headers.add_header( "Set-Cookie", "user=%s; expires=%s; path=/" % ( user.username,expires_datetime.strftime( cookie_time_format ) ) )
             self.response.headers.add_header( "Set-Cookie", "session=%s; expires=%s; path=/" % ( user.session, expires_datetime.strftime( cookie_time_format ) ) )
        else:
             #User login failed
             pass

注销功能

# Remove the previous cookie info 
class LoginAPI( Webapp.RequestHandler ):
        def get(self):
            # remove the cookie
            self.response.headers.add_header( "Set-Cookie", "user=%s; expires=%s; path=/" % ( "",expires_datetime.strftime( cookie_time_format ) ) )
            self.response.headers.add_header( "Set-Cookie", "session=%s; expires=%s; path=/" % ( "", expires_datetime.strftime( cookie_time_format ) ) )

当您需要用户登录时

# Get the session info from cookie. If the session info match the info stored in datastore
# Then user authenticate successfully.
class SomePage(Webapp.RequestHandler):
    def get(self):
        # get cookie info
        username_from_cookie = self.request.cookies.get("user", "")
        session_from_cookie = self.request.cookies.get("session", "")

        if username_from_cookie and session_from_cookie:
            user = User.all().filter("username = ", username_from_cookie).get()
            if user.session == session_from_cookie:
                # the user is login correctly
                pass
            else:
                # the user is not login
                pass
        else:
            # the user is not login
            pass
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Google AppEngine:自定义身份验证 的相关文章

随机推荐

  • Spring Data MongoDB:BigInteger 到 ObjectId 转换

    我在使用 Spring Data MongoDB 更新查询时遇到问题 我检索一些对象的 id 作为 BigInteger 值 然后我想进行以下查询 Query query new Query Criteria where id is id
  • 如何删除codeigniter上的cookie

    我不知道如何删除cookie 我想要的是当我提交表格时 cookie 也被删除 我尝试了 delete cookie name 但不起作用 我想是因为我创建的cookiejavascript 请检查我的代码来解决这个问题 这是我的示例文本字
  • 通过 JNDI 使用 ActiveMQ

    我正在尝试使用 JNDI 创建与 ActiveMQ 的简单连接 I have 名为 example A 的队列 根据ActiveMQ 文档涉及 JNDI 如果我想通过 JNDI 使用 ConectionFactories 和队列 主题 我必
  • 如何在视图出现之前滚动到 iPhone 上 UITableView 的底部

    我有一个UITableView填充有不同高度的单元格 我希望当视图被推入视图时表格滚动到底部 我目前有以下功能 NSIndexPath indexPath NSIndexPath indexPathForRow log count 1 in
  • hibernate:在运行时创建实体(带注释)

    是否可以在运行时创建休眠实体类 带注释 应该和运行时添加的表有关 实体应该对 Hibernate 可见 这一点很重要 一般情况下可以吗 您能就这个问题给我一些建议吗 我明白 反思是关键词 但还要寻找更多的词 问候 在这种情况下 您可能希望在
  • 春天不行。 [未初始化常量 Spring::SID::DL ]

    我无法运行 Spring 这是错误日志 myid no MacBook Pro myid spring Users myid rbenv versions 1 9 3 p484 lib ruby gems 1 9 1 gems spring
  • 私有字段会被子类继承吗?

    我读过 子类不能继承私有字段或方法 然而 在这个例子中 class SuperClass private int n 3 int getN return n class SubClass extends SuperClass public
  • c中“atoi”和“strtol”之间的用法差异

    我一直在使用atoi已经一年了 最近几天我遇到一个问题 atoi 20 给出的值为0作为输出 当我用谷歌搜索这个问题时 我发现它已被弃用并且strtol应该使用 我发现的有趣的一点是atoi内部使用strtol 那么 当我将其更改为时 问题
  • 使用 StreamReader 查找字符串的有效方法

    我获取网络响应并使用 Streamreader 获取字符串形式的响应 我的代码是 HttpWebResponse response HttpWebResponse request GetResponse StreamReader reade
  • 如何使用 autofac 注册类型化 httpClient 服务?

    我正在创建 MVC Web 应用程序 该应用程序使用单独的 net core 2 2 调用 apiHttpClients 调用每个控制器 相同的 api Ex 对于用户控制器操作 UserService httpclient 对于后控制器操
  • rgdal“gdal-config”中配置错误

    我目前正在 Linux 集群上用 R 运行一些物种分布建模和丰富度映射 为了运行我的分析 我需要安装 rgdal 以便建模包中的栅格函数正常工作 我已经安装了 proj4 和 gdal 但是 当我尝试安装 rgdal 时 我收到一条错误消息
  • 成为 EC2 上的根设备意味着什么?

    我在 EC2 文档中找不到答案 它是做什么用的 如果我启动了 EBS 支持的实例 则该实例的根设备将是 EBS 卷 如果我在实例上安装一些工具 软件 这些工具 软件是否会默认安装在根实例上 不过我想这个问题确实来自于对根设备的了解很少 有这
  • 如何添加到 MySQL 中的每一行?

    我们有一个简单整数列 我们想要向每一行添加值 10 对于 MySQL 数据库 我们如何在 sql 中执行此操作 实际上我们还有另一个列需要做同样的事情 它是一个日期 我们需要在日期上添加一个月 怎么做 整数 UPDATE table nam
  • 指针是否保证>某个值?

    在 C 中 当我这样做时new 甚至malloc 是否能保证返回地址大于某个值 因为 在这个项目中 我发现使用 0 1k 作为枚举非常有用 但如果有可能获得这么低的值 我不想这样做 我唯一的目标系统是 32 位或 64 位 CPU 操作系统
  • lxml 标签名称带有“:”

    我正在尝试使用 lxml etree 从 JSON 对象创建 xml 树 有些标记名中包含冒号 例如 设置 当前 我尝试使用 settings current 作为标签名称 但我得到这个 ns0 当前 xmlns ns0 设置 是的 首先阅
  • django 2 中的迁移错误; AttributeError:“str”对象没有属性“decode”

    我正在我新建的名为 core 的应用程序上运行迁移 当我在其上运行迁移时 我收到一个错误 告诉我这一点 query query decode errors replace AttributeError str object has no a
  • LXML:无法导入 etree

    我访问此页面并下载了 tar 文件 http pypi python org pypi lxml 2 3 4 downloads 然后 我将 lxml 文件夹复制到我的 Python26 Lib 文件夹中 现在 当我走向口译员并输入from
  • 使用 RESTlet 进行细粒度身份验证

    我想使用带有细粒度身份验证的 RESTlet 公开资源 我的ServerResource应该可以通过访问GET仅适用于经过身份验证的会员 使用基本身份验证 但是 请求使用POST无需任何身份验证的呼叫者也应该可以使用 为了澄清 http 路
  • 在WebKit/Chrome中使用XHR上传二进制字符串(相当于Firefox的sendAsBinary)

    我正在开发一个使用多个尖端 WebKit 功能的 Web 应用程序 它本质上是这样做的 读取本地文件FileReader 使用 JavaScript 解压缩库将每个文件解压缩为字符串 并使用 XMLHttpRequest POST 每个文件
  • Google AppEngine:自定义身份验证

    我可以使用 Google 帐户在 AppEngine 中验证我的用户的方式简直太棒了 但是 我需要使用我的自定义认证登录系统 我将有一个 AppUsers 表 其中包含用户名和加密密码 我在 gae 上读到了一些有关会话的内容 但我需要帮助