session - 处理 OAuth 响应和 session

标签 session cookies oauth go

在 OAuth2 token 交换结束时,我 [通常] 留下一个 JSON 用户数据数组,我已将这些数据解编为一个结构(例如,GoogleUser),其中包含我关心的字段。

将该数据记录到我的数据库的明智方法是什么?只需从回调处理程序调用 CreateUser 函数,传递结构并保存它(对我来说是显而易见的方法),在检查用户是否已经存在于数据库中之后?

我假设我应该在回调处理程序中创建一个 session token (即 session.Values["authenticated"] == true),将其存储在 cookie 中(具有合理的到期日期)并简单地在任何需要登录用户的处理函数上检查 if authenticated == true?或者,对于管理员处理程序:if admin_user == true这里有什么风险(如果有的话)假设我正在通过 HTTPS 交谈并使用安全 cookie?

对基本问题表示歉意:只是想掌握“最佳实践”方法,以使用 OAuth 登录用户。

最佳答案

关于您的第一个问题,通常建议在单个事务中进行检查和插入。这取决于您使用的是什么数据库,但这些通常称为 UPSERT 语句。在 PLSQL 中它看起来有点像这样(根据口味修改):

CREATE FUNCTION upsert_user(emailv character varying, saltv character varying, hashv character varying, date_createdv timestamp without time zone) RETURNS void
    LANGUAGE plpgsql
AS $$;
BEGIN
    LOOP
        -- first try to update the key
        UPDATE users SET (salt, hash) = (saltv, hashv) WHERE email = emailv;
        IF found THEN
            RETURN;
        END IF;
        -- not there, so try to insert the key
        -- if someone else inserts the same key concurrently,
        -- we could get a unique-key failure
        BEGIN
            INSERT INTO users(email, salt, hash, date_created) VALUES (emailv, saltv, hashv, date_createdv);
            RETURN;
        EXCEPTION WHEN unique_violation THEN
            -- do nothing, and loop to try the UPDATE again
        END;
    END LOOP;
END;
$$;

关于您的第二个问题,通常 Secure cookies 通过 HTTPS 就足够了。我会设置 HttpOnly 选项,通常还会设置 Path 选项。

HttpOnly表示cookie不能被JS访问(只能HTTP或者HTTPS),Path选项可以指定什么路径(在URL中) cookie 的有效期为。

关于session - 处理 OAuth 响应和 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16635644/

相关文章:

php - session 的默认生命周期是多少?

google-apps-script - OAuth2 库产生属性存储配额错误

php - 显示用户名 PHP MySql

node.js - 错误 : no open connections at Db. _executeQueryCommand Node.js

java - 在 JBoss AS 中部署的 2 个 Java EE 应用程序之间共享 session

python - 使用 XOAUTH IMAP 访问 Gmail 收件箱

php - 是否有一种使用 PHP 发布到 Twitter 而无需管理用户登录或获取推文的简单方法?

javascript - 如何在Javascript中的websocket请求 header 中设置cookie?

asp.net-mvc-3 - MVC3 应用程序并跟踪用户最初进入的页面

http - YouTube 和 Google 如何访问彼此的 cookie?