gpt4 book ai didi

php - 将 cakephp 的 auth 与 hybridauth (oauth) 结合起来

转载 作者:行者123 更新时间:2023-12-04 05:38:43 25 4
gpt4 key购买 nike

我想我只是在寻找有关如何使用 cakephp 2.0 在我的网站上设置我的用户 + 身份验证区域的一些指导。

我在 UserController.php 中设置了基本的登录和注册功能,其中还包含用于查找和显示其他用户的功​​能。

我还想使用 hybridauth 插件来允许用户使用他们的社交媒体/oauth 帐户登录/注册(允许数据库中的每个用户有多个社交帐户,以便同一用户可以使用他们的 twitter 或 facebook 详细信息, 例如)。我目前只有 3 个提供者,所以我计划在我的用户数据库中创建 6 列, token 和 outhid 位于同一用户行中。这是在另一个 Controller - HybridauthController.php 中。

我设置了 hybridauth 以便它从帐户详细信息创建它的“hybridauth”对象,这很好 - 但我希望能够将整个“身份验证”合并在一起,以便我的 cakephp session 包含 hybridauth session 数据(对象)创建我可以使用的通用“当前用户”数组,并在其中设置一些通用变量,具体取决于它们是否来自 oauth。

我目前没有将 session 存储在数据库中,理想情况下我希望允许所有人进行持久 session ,无论他们是否使用 oauth 帐户。我真的不明白持久 session 应该如何与 hybridauth 一起工作,因为在这个例子中,当用户第二天返回时 $current_user_id 将如何填写?不是通过 cookies ,确定吗?

http://hybridauth.sourceforge.net/userguide/HybridAuth_Sessions.html

所以总而言之,我正在寻找一种简单的解决方案,将我的所有“ session ”/“身份验证”/“用户”数据组合到用户 session 中的一个简单数组中。希望这一切都有意义!

谢谢

最佳答案

回答晚了,但希望它能帮助你或其他人搜索。

我很难将 HybridAuth 集成到已经使用 Cake Sessions 和 Auth 组件的预先存在的 CakePHP (1.3) 应用程序中。我最初尝试使用从 HybridAuth 网站下载的 Cake 示例,但这对我不起作用。

我们之前存在的 User Controller 已经有一堆逻辑,包括 beforeFilter方法。那就是我插入我的 session_start() 的地方与 HybridAuth Cake 示例中的类声明相反:

class UsersController extends AppController {
...
var $components = array('Session','Auth','Email');
...
public function beforeFilter(){
// following two lines may not be necessary for your setup
$this->Auth->allow('oauth', 'oauthLogout');
$excludeBeforeFilter = array('oauth', 'oauthLogout');
if ( ! in_array($this->action, $excludeBeforeFilter) ) {
// preexisting Auth logic -- I had to bypass it because
// calling `session_start` was messing up Cake's Auth
...
} else {
/* THIS IS NECCESSARY FOR HYBRIDAUTH (OAUTH) */
/* setting the session ID made it so users could NOT log
in from a 3rd party and our site */
session_id($_COOKIE['CAKEPHP']);
session_start();
}
}

...

public function oauth($provider){
$this->autoRender = false;
// include HybridAuth
require_once( WWW_ROOT . 'hybridauth/Hybrid/Auth.php' );

try {
// I stored my provider config in a Cake config file
// It's essentially a copy from the site/Cake example
$hybridAuth = new Hybrid_Auth(Configure::read('HAuth.config'));
$adapter = $hybridAuth->authenticate($provider);
$userProfile = $adapter->getUserProfile();

// method on the User model to find or create the 3rd party user
$user = $this->User->findOrCreate($userProfile, $provider);

if ( ! $user ) {
echo 'Unable to find/create user';
} else {
// configure your fields as necessary
$this->Auth->fields = array(...);
$this->Auth->login($user);
}
} catch (Exception $e) {
echo $e->getMessage();
}
}
}

此时,可以在 Auth 组件中访问第 3 方 (HybridAuth) 用户。通过这种方式,用户仅登录了一个第 3 方服务或先前存在的登录(但不能同时登录)。

我也遇到了注销问题。为此,我基本上销毁了所有 session /cookie 以确保安全。在 oauthLogout UsersController的方法:
// probably overkill/paranoia
$this->Auth->logout();
$this->Session->destroy();
session_destroy($_COOKIE['CAKEPHP']);
/* these two seemed to make the difference
especially the 4th parameter */
setcookie( 'PHPSESSID', '', 1, '/' );
setcookie( 'CAKEPHP', '', 1, '/' );

看起来 super hacky - 抱歉。希望它有帮助!

关于php - 将 cakephp 的 auth 与 hybridauth (oauth) 结合起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11570228/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com