gpt4 book ai didi

php - Laravel 4 自定义授权

转载 作者:可可西里 更新时间:2023-11-01 13:28:06 25 4
gpt4 key购买 nike

首先对我的英语感到抱歉,我会尽力而为。

我是 Laravel 的新手,我试图通过 SOAP WS 实现自定义身份验证,我声明了实现 UserProviderInterface 的新类。我成功实现了 retrieveByCredentials 和 validateCredentials 方法,但由于我无权访问数据库或全局用户信息,我无法实现 retrieveByID 方法。有什么方法可以使自定义身份验证不基于用户 ID?

我需要:

- Login and validate user throught SOAP WS
- Store User Info returned by WS.
- Remember me functionality
- Secure routes based on logged user and level of access
- Logout

实现类:

 <?php
namespace Spt\Common\Providers;
use Illuminate\Auth\UserProviderInterface;
use Illuminate\Auth\GenericUser;
use Illuminate\Auth\UserInterface;

class AuthUserProvider implements UserProviderInterface{
private $user;

public function __construct(){
$this->user = null;
}

public function retrieveByID($identifier){
return $this->user;
}

public function retrieveByCredentials(array $credentials){
$client = new \SoapClient('webserviceurl');
$res = $client->Validar_Cliente($credentials);
$res = $res->Validar_ClienteResult;

if($res->infoError->bError === true){
return;
}

$res->id = $res->id_cliente;
$user = new GenericUser((array) $res);
return $user;
}

public function validateCredentials(UserInterface $user, array $credentials){
//Assumed that if WS returned a User is validated
return true;
}
}

我认为重新实现 UserProviderInterface 不是解决方案,但我用谷歌搜索并没有找到其他方法

有什么想法吗?

最佳答案

除了 AuthUserProvider 的私有(private)变量 $user 无法在当前 http 请求中存活之外,您几乎已经完成了。如果你不能从你的网络服务中“通过 id 检索”,我想唯一的方法是在 session 中存储整个用户 - Laravel 本身将用户的 id 存储在 session 中以及它存储的事实只有 id(不是整个用户)是需要 retrieveByID 方法的原因之一。
以下仅用于澄清,未经测试。

class AuthUserProvider implements UserProviderInterface {

public function retrieveByCredentials(array $credentials) {
$client = new \SoapClient('webserviceurl');
$res = $client->Validar_Cliente($credentials);
$res = $res->Validar_ClienteResult;
if($res->infoError->bError === true) {
return;
}
$res->id = $res->id_cliente;

Session::put('entireuser', $res);

$user = new GenericUser((array) $res);
return $user;
}


public function retrieveByID($identifier) {

$res = Session::get('entireuser');

return new GenericUser((array) $res);
}

// ...

}

如果您不能通过 id 从您的网络服务中检索,我猜您也不能通过记住 token 检索,因此您可能无法实现“记住我”功能,除非您将部分用户数据存储在第二个数据库中(此时可以用来代替上面的 session )。

关于php - Laravel 4 自定义授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22064809/

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