使用google oauth配置多个登录会话

使用google oauth配置多个登录会话,oauth,oauth-2.0,google-oauth,odoo,google-authentication,Oauth,Oauth 2.0,Google Oauth,Odoo,Google Authentication,我使用谷歌OAuth与奥多进行谷歌登录 一切正常,我可以使用谷歌登录,没有问题。但是,我无法使用相同的google凭据打开多个会话 例如,如果我打开两个会话,一个在chrome中,另一个在firefox中,那么旧的会话将被注销。 我不明白问题出在哪里,因为无论我启动了多少会话,如果我分别使用用户名和密码登录,,而不使用google OAuth,所有会话都不会注销-工作正常 我想知道它和代码有什么关系,所以我做了很多调整,但都没有效果。我看到它一度无法获取旧会话的会话信息。然而,我的问题不是关于代

我使用谷歌OAuth与奥多进行谷歌登录

一切正常,我可以使用谷歌登录,没有问题。但是,我无法使用相同的google凭据打开多个会话

例如,如果我打开两个会话,一个在chrome中,另一个在firefox中,那么旧的会话将被注销。

我不明白问题出在哪里,因为无论我启动了多少会话,如果我分别使用用户名和密码登录,,而不使用google OAuth,所有会话都不会注销-工作正常

我想知道它和代码有什么关系,所以我做了很多调整,但都没有效果。我看到它一度无法获取旧会话的会话信息。然而,我的问题不是关于代码

我的问题是,google OAuth或Odoo 8中是否有任何配置或设置可以让用户同时拥有多个会话,或者在使用google OAuth和Odoo时是否有任何我需要知道的设置


任何想法都会非常有用,因为我已经为此奋斗了好几天。谢谢

如果您按照上述步骤操作,您将能够通过OAuth模块成功地使用OpenERP配置Google应用程序(Gmail)。我唯一缺少的是在youtube视频中发现的一个额外步骤;你必须:

  • 转到设置-用户
  • 对于要授予OAuth访问权限的用户,使用“通过电子邮件发送重置密码说明”选项向他们发送密码重置
  • 要求您的用户(或您自己)使用他们在电子邮件中收到的链接,但是,当他们打开它时,他们将只看到带有“使用谷歌登录”选项的登录屏幕。(没有可用的典型更改密码选项)
  • 使用正确的谷歌帐号,瞧现在它连接顺畅
  • 显示如何在OpenERP中使用Google登录的Youtube视频:
如果配置Oauth2和odoo,请参阅此链接以了解更多详细信息


我已经为OdooV9构建了一个模块。没有此模块,Odoo只保存一个令牌。但是,当您在多台计算机中使用odoo时,每台计算机使用一个令牌

默认情况下,odoo不支持多令牌。您需要修改模块auth_oauth的代码

有了这个模块,它可以保存所有令牌,就像您可以有多个连接一样

您可以加载并安装此模块:


就像我说的,一切正常。我早就多走了一步。但这不是问题所在。问题是它不能保留旧的会话。仅保留最近的会话,并注销所有较旧的会话。
class ResUsers(models.Model):
_inherit = 'res.users'

oauth_access_token_ids = fields.One2many('auth.oauth.multi.token', 'user_id', 'Tokens', copy=False)
oauth_access_max_token = fields.Integer('Number of simultaneous connections', default=5, required=True)

@api.model
def _auth_oauth_signin(self, provider, validation, params):
    res = super(ResUsers, self)._auth_oauth_signin(provider, validation, params)

    oauth_uid = validation['user_id']
    user_ids = self.search([('oauth_uid', '=', oauth_uid), ('oauth_provider_id', '=', provider)]).ids
    if not user_ids:
        raise openerp.exceptions.AccessDenied()
    assert len(user_ids) == 1

    self.oauth_access_token_ids.create({'user_id': user_ids[0],
                                        'oauth_access_token': params['access_token'],
                                        'active_token': True,
                                        })
    return res

@api.multi
def clear_token(self):
    for users in self:
        for token in users.oauth_access_token_ids:
            token.write({
                'oauth_access_token': "****************************",
                'active_token': False})

@api.model
def check_credentials(self, password):
    try:
        return super(ResUsers, self).check_credentials(password)
    except openerp.exceptions.AccessDenied:
        res = self.env['auth.oauth.multi.token'].sudo().search([
            ('user_id', '=', self.env.uid),
            ('oauth_access_token', '=', password),
            ('active_token', '=', True),
        ])
        if not res:
            raise