使用 OAuth 与 CakePHP 2.3 进行身份验证

2024-01-19

我有一个 CakePHP 应用程序,我希望我的用户能够使用 OAuth 登录。

我似乎 OAuth 对话工作正常,因为我正在从其末尾获取用户信息,并且可以将令牌保存到我的users表罚款。

我的问题可能是一个愚蠢的问题,但我正在尝试弄清楚何时需要使用给我的令牌。我是否应该将用户的 ID 存储在 cookie 中,并且每当他们“返回”我的网站时,从数据库中获取他们的令牌并使用它来重新检查他们的详细信息?

我没有通过 OAuth 获得用户的任何密码,所以我应该绕过这些人的 Auth,还是使用其中一个令牌作为 CakePHP 的密码?


以下是我的 UsersController 的登录和 oauth2callback 部分:

<?php
class UsersController extends AppController {

    public function login() {
        if ($this->request->is('post')) {
            if ($this->Auth->login()) {
                $this->redirect($this->Auth->redirect());
            } else {
                $this->Session->setFlash(__('Invalid username or password'));
            }
        } else {
            $client = $this->getGoogleClient();
            $authUrl = $client->createAuthUrl();
            $this->set(array('GoogleAuthUrl' => $authUrl));
        }
    }

    public function oauth2callback() {
        $client = $this->getGoogleClient();

        if (isset($this->request->query['code'])) {
            $client->authenticate($this->request->query['code']);
            $this->Session->write('token', $client->getAccessToken());
            $this->redirect('oauth2callback');
            return;
        }

        if ($this->Session->read('token')) {
            $client->setAccessToken($this->Session->read('token'));
        }

        $accessToken = $client->getAccessToken();
        if ($accessToken) {
            $oauth2  = new Google_Oauth2Service($client);
            $user = $oauth2->userinfo->get();

            $token = json_decode($accessToken);
            debug($token);
            debug($user);
            // We now have a user from Google. Either log them in, or create a new user
            $id = $this->User->field('id', array('email' => $user['email'], 'oauth_id' => $user['id']));
            if (empty($id)) {
                $new_user = $this->User->create();
                $new_user['User']['username'] = $user['email'];
                $new_user['User']['email'] = $user['email'];
                $new_user['User']['oauth_id'] = $user['id'];
                $new_user['User']['oauth_token'] = $token->access_token;
                $new_user['User']['oauth_expires'] = time() + $token->expires_in;
                $new_user['User']['oauth_id_token'] = $token->id_token;
                $new_user['User']['oauth_refresh_token'] = $token->refresh_token;
                $new_user['User']['oauth_created'] = $token->created;
                if ($this->User->save($new_user)) {
                    $new_user['User']['id'] = $this->User->id;
                    debug($new_user);
                    $this->Session->setFlash(__('Registration complete!'));
                    if ($this->Auth->login($new_user)) {
                     //   return $this->redirect($this->Auth->redirectUrl());
                    }
                    //$this->redirect(array('action' => 'index'));
                } else {
                    $this->Session->setFlash(__('There was a problem with your registration. Please, try again.'));
                }

            }

            // The access token may have been updated lazily.
            $this->Session->write('token', $client->getAccessToken());
        }
    }

}

CakePHP 将自定义身份验证添加到 Auth 组件的方法是创建一个“自定义身份验证对象”(请参阅http://book.cakephp.org http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html#creating-custom-authentication-objects).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 OAuth 与 CakePHP 2.3 进行身份验证 的相关文章

随机推荐

  • opengl中使用哪种图像类型

    当使用 OpenGL 为 Android 编程时 我似乎可以为图像使用 BMP JPG 和 PNG 文件类型 哪一个 如果有的话 最好 非常感谢 这不是 OpenGL 的问题 因为一旦你有了Graphics Bitmap对象来源很大程度上无
  • yarn-client模式和yarn-cluster模式的区别

    我在纱线客户端模式和纱线集群模式上运行类似的代码时遇到了一些问题 当我在客户端模式下运行我的代码时 它可以完美执行 但在纱线集群节点上运行时会失败 它抛出文件非文件异常 指出找不到 pyspark zip 文件 对此的任何见解都会有所帮助
  • Python 中与语法、标记、词干和词义消歧有关的一些 NLP 内容

    背景 TLDR 为了完成而提供 寻求有关奇怪需求的最佳解决方案的建议 我是一名大学四年级的 文学 学生 只有我自己的编程指导 我对Python有足够的能力 所以我不会在实现我找到的解决方案 大多数时候 并在它们的基础上进行开发时遇到麻烦 但
  • 如何提供具有不同数据库模式的多个版本的 API?

    在 Kevin Goldsmith 2015 年的演讲中Spotify 的微服务 https youtu be 7LGPeBgNFuU t 925 从 15 25 17 43 他提到 当他们创建新版本的 API 时 他们只是创建一个新服务器
  • 使用 Python 查找最相似的行

    我有两个数据框 df1 和 df2 在 df1 中 我存储一行包含一组值 我想在 df2 中找到最相似的行 import pandas as pd import numpy as np Df1 has only one row and fo
  • Codeigniter 当我单击“删除”时,如果单击“是”或“否”,我想要弹出通知

    Model function delete exchange ExchangeRateId this gt db gt where ExchangeRateId ExchangeRateId this gt db gt delete exc
  • 在 WPF 中,如何更改代码中 DataTemplate 的 Textblock 的文本绑定?

    我有一个 ListBox 其 ItemsSource 绑定到对象列表 列表框有一个 ItemTemplate 和一个包含 TextBlock 的 DataTemplate 文本块的 Text 绑定到对象的 Name 属性 即 Text Bi
  • 更改 OpenShift JBoss AS 7 中的 URIEncoding

    我正在使用 OpenId 模块使用 Spring Security 构建一个测试应用程序 我也用jQuery OpenId 插件 http jvance com pages JQueryOpenIDPlugin xhtml支持一些提供商 我
  • date-fns 2 - 无法让树摇动工作

    我不知道如何date fns https github com date fns date fnsv 2 树摇动功能有效 为了帮助我 我使用以下方法制作了一个非常简单的项目 date fns 2 1 0 webpack 4 39 3 typ
  • 如何信任具有交叉签名根的 SSL 证书,在 android <= 5 上已过期

    我在一家使用 Comodo Sectigo SSL 证书的公司工作 但是突然间 我们的应用程序在使用 Okhttp 客户端将 POST 发送到服务器时开始抛出此错误 在 Android 4 和 5 版本中 HTTP FAILED javax
  • 如何设置 Emacs 服务器使用的端口?

    我使用 Emacs 完成大部分开发工作 我希望能够从家里连接到在我的办公室工作站上运行的 Emacs 服务器 我通过 VPN 连接到我的办公室网络 我认为这基本上是安全的 不管怎样 我有一个脚本可以复制服务器身份验证文件 但看起来端口每次都
  • Perl 如何构建动态多级哈希查找

    我有一个代码块 我使用了很多次 但有一些细微的变化 我试图将其制作成子例程 此代码块完成配置模板 路由器接口 VRF 其他网络内容 它通过在哈希数据结构 称为 config hash 中查找数据来实现这一点 该数据结构是通过摄取 excel
  • std::promise 抛出未知错误,除非调用 sleep

    我有这个代码 include
  • 从数据库中解析xml

    目前我有 xml 存储在 ms sql 数据库中并且不是文件 这是一个小样本
  • 使用 RelaxNG 进行 XML 模式验证

    您可以推荐哪些 XML 验证工具来提高性能和准确性 而这两个工具对于我们的系统来说都是一个关键问题 我们有以下要求 It is notxmllint 见下文 支持RelaxNG 可以轻松地与 Perl 集成 这是可选的 但它会很好 为什么不
  • 如何获得准确的中心点?

    如何使用 OpenCV 霍 夫圆变换获得准确的中心点 我需要更多精确的 x y 坐标小数位 准确地说我的意思是这样的 我用 matlab 得到了这些中心坐标 x107 775526315904 y112 963480232638 x469
  • 从 GitHub 存储库下载单个文件夹或目录

    如何从 GitHub 上托管的远程 Git 存储库仅下载特定文件夹或目录 假设示例 GitHub 存储库位于此处 email protected cdn cgi l email protection foobar Test git 其目录结
  • 如何在 Oracle PL/SQL 中动态获取 OBJECT 或 ROWTYPE 的值(反射)?

    我正在尝试采用 ROWTYPE RECORD 或 OBJECT 类型并将其动态转换为单个字符串表示形式 我想动态地执行此操作 Update 感谢 Justin Cave 的反馈 对 OBJECT 类型执行此操作现在可以正常工作 示例数据 I
  • 动态更改静态单元格上的节标题文本

    我有一个 UITableViewController 其表视图具有静态单元格 在故事板中定义 我的表格视图有两个部分 第一个部分有两个单元 第二个部分有三个单元 第二部分的标题中也有文本 我想做的是 当用户点击第一部分中的第一个或第二个单元
  • 使用 OAuth 与 CakePHP 2.3 进行身份验证

    我有一个 CakePHP 应用程序 我希望我的用户能够使用 OAuth 登录 我似乎 OAuth 对话工作正常 因为我正在从其末尾获取用户信息 并且可以将令牌保存到我的users表罚款 我的问题可能是一个愚蠢的问题 但我正在尝试弄清楚何时需