使用Parse.com PHP SDK进行Laravel身份验证



我正试图在Laravel中构建一个使用Parse作为后端的快速原型。我已经使用composer导入了Parse SDK并正确初始化了它。我希望将Laravel Auth扩展为使用Parse Users。

到目前为止我所做的:

  • 子类ParseUser,并使我的子类实现AuthenticatableContract和CanResetPasswordContract
  • 创建了实现UserProvider的ParseUserProvider
  • 使用我的新"分析"驱动程序的扩展身份验证

我可以为用户注册,这似乎让他们登录,但一旦他们登录,我就无法访问任何Auth方法,如Auth::user()。我也无法将他们注销-我收到一个错误"传递给Illuminate\Auth\Guard::refreshRememberToken()的参数1必须实现接口Illuminat\Contracts\Auth\Auth\Authable,给定数组"。此外,如果我尝试从fresh登录,我可以看到我的数据从Parse中被检索到,并成功启动了retrieveByCredentials/validateCredentials,但我仍然无法访问用户属性。有什么可能出错的线索吗?我的代码:

class ParseAuthProvider extends ServiceProvider {
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
$this->app['auth']->extend('parse',function()
{
return new ParseUserProvider( new ParseUser());
});
}
...

class ParseUserProvider implements UserProvider {
/**
* The Parse user model.
*
* @var string
*/
protected $model;
/**
* Create a new Parse user provider.
*
* @param  string  $model
* @return void
*/
public function __construct($model)
{
User::registerSubclass();
$this->model = $model;
}
/**
* Retrieve a user by their unique identifier.
*
* @param  mixed  $identifier
* @return IlluminateContractsAuthAuthenticatable|null
*/
public function retrieveById($identifier)
{
$query = User::query();
$query->equalTo("id", $identifier);
return $query->find();
}
/**
* Retrieve a user by their unique identifier and "remember me" token.
*
* @param  mixed  $identifier
* @param  string  $token
* @return IlluminateContractsAuthAuthenticatable|null
*/
public function retrieveByToken($identifier, $token)
{
$query = User::query();
$query->equalTo("id", $identifier);
$query->equalTo("remember_token", $token);
return $query->find();
}
/**
* Update the "remember me" token for the given user in storage.
*
* @param  IlluminateContractsAuthAuthenticatable  $user
* @param  string  $token
* @return void
*/
public function updateRememberToken(UserContract $user, $token)
{
$user->set("remember_token",$token);
$user->save();
}
/**
* Retrieve a user by the given credentials.
*
* @param  array  $credentials
* @return IlluminateContractsAuthAuthenticatable|null
*/
public function retrieveByCredentials(array $credentials)
{
// First we will add each credential element to the query as a where clause.
// Then we can execute the query and, if we found a user, return it in a
// Eloquent User "model" that will be utilized by the Guard instances.
$query = User::query();
$query->equalTo("username", $credentials['email']);
$user = $query->first();
if (!empty($user)){
return $user;
}
return  null;
}
/**
* Validate a user against the given credentials.
*
* @param  IlluminateContractsAuthAuthenticatable  $user
* @param  array  $credentials
* @return bool
*/
public function validateCredentials(UserContract $user, array $credentials)
{
try{
var_dump($user);
$user->logIn($credentials['email'],$credentials['password']);
return true;
} catch (ParseException $ex){
return false;
}

}
/**
* Create a new instance of the model.
*
* @return IlluminateDatabaseEloquentModel
*/
public function createModel()
{
$class = '\'.ltrim($this->model, '\');
return new $class;
}
}
class User extends ParseUser implements AuthenticatableContract, CanResetPasswordContract {
use Authenticatable, CanResetPassword;

/**
* Get the unique identifier for the user.
*
* @return mixed
*/
public function getAuthIdentifier()
{
return $this->getObjectId();
}
/**
* Get the password for the user. 
* Not available in the Parse World
*
* @return string
*/
public function getAuthPassword()
{
return null;
}
/**
* Get the token value for the "remember me" session.
*
* @return string
*/
public function getRememberToken()
{
return $this->get("remember_token");
}
/**
* Set the token value for the "remember me" session.
*
* @param  string  $value
* @return void
*/
public function setRememberToken($value)
{
$this->set("remember_token", $value);
}

}

https://github.com/HipsterJazzbo/LaraParse

这个包几乎完全符合我的目标,为任何遇到这个问题的人

最新更新