jmo*_*eno 6 php authentication soap web-services laravel-4
首先抱歉我的英语,我会尽力做到最好.
我是Laravel的新手,我试图通过SOAP WS实现自定义身份验证,我声明了实现UserProviderInterface的新类.我成功实现了retrieveByCredentials和validateCredentials方法,但由于我无法访问数据库或全局用户信息,因此无法实现retrieveByID方法.有没有办法让自定义Auth不基于用户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
Run Code Online (Sandbox Code Playgroud)
实施类:
<?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;
}
}
Run Code Online (Sandbox Code Playgroud)
我认为重新实现UserProviderInterface它不是解决方案,但我用谷歌搜索,而不是找到其他方式
任何的想法?
除了私有变量不能在当前的 http 请求中生存之外,您几乎已经完成$user了AuthUserProvider。如果您无法从 Web 服务中“按 id 检索”,我想唯一的方法是将整个用户存储在会话中 - Laravel 本身将用户的 id 存储在会话中,并且它仅存储 id(而不是整个 id) user)是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);
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
如果您无法通过网络服务中的 id 进行检索,我想您也无法通过记住令牌进行检索,因此您可能无法实现“记住我”功能,除非您将部分用户数据存储在第二个数据库中(此时可以使用它来代替上面的会话)。
| 归档时间: |
|
| 查看次数: |
1120 次 |
| 最近记录: |