Laravel Stormpath无法访问用户对象

时间:2017-01-24 09:49:20

标签: laravel laravel-5 stormpath

我正在使用Laravel和Stormpath进行用户管理。我可以使用AJAX成功注册和登录用户。

成功登录后,只有url返回给AJAX,但登录后,当我转到用户特定页面时,我无法获取用户数据。

注册和登录发生在RegisterController
用户页面使用UserController

呈现

我尝试使用

获取用户数据
$user = app('stormpath.user');
在UserController中

,但是当我执行dd($user) null 时,会返回。

如何在其他控制器中成功登录或注册后如何持久保存或获取用户数据?

任何帮助表示赞赏!提前致谢!

2 个答案:

答案 0 :(得分:1)

对于Stormpath Laravel集成,当您运行AJAX调用时,我们不会设置任何cookie。我们在标题响应中为您提供JWT,您需要查看并自己存储它们。然后,JWT需要作为Bearer令牌附加到所有其他请求,这将允许您使用`$ user = app(' stormpath.user')方法从JWT获取用户信息

答案 1 :(得分:0)

我终于把一切都搞定了。谢谢@bretterer

// Stormpath user account creation
\Stormpath\Client::$apiKeyProperties = "apiKey.id="
       .env('STORMPATH_CLIENT_APIKEY_ID').
       "\napiKey.secret=".env('STORMPATH_CLIENT_APIKEY_SECRET');

$client = \Stormpath\Client::getInstance();
$apps = $client->tenant->applications;
$apps->search = array('name' => 'My Application');
$application = $apps->getIterator()->current();
$account = \Stormpath\Resource\Account::instantiate(
    [
        'givenName'       => $request->input('username'),
        'middleName'      => '',
        'surname'         => 'StromTrooper',
        'username'        => $request->input('username'),
        'email'           => $request->input('user_mail'),
        'password'        => $request->input('user_pass'),
        'confirmPassword' => $request->input('user_pass')
    ]
 );

// Create User Account and Log-in the User
try
{
   $response = $application->createAccount($account);

   $passwordGrant = new \Stormpath\Oauth\PasswordGrantRequest(
        $request->input('user_mail'), 
        $request->input('user_pass')
   );

   $auth = new \Stormpath\Oauth\PasswordGrantAuthenticator($application);

   $result = $auth->authenticate($passwordGrant);

   $atoken = cookie("access_token", 
                    $result->getAccessTokenString(), 
                    $result->getExpiresIn()
                   );
   $rtoken = cookie("refresh_token", 
                     $result->getRefreshTokenString(),
                     $result->getExpiresIn()
                    );
   $response_bag['success'] = url('userprofile');

 }
 catch (\Stormpath\Resource\ResourceError $re)
 {
       $response_bag['error'] = $re->getMessage();
       $atoken = 'null';
       $rtoken = 'null';           
 }

 return response()
      ->json($response_bag)
      ->withCookie($atoken)
      ->withCookie($rtoken);

在用户控制器中,我可以使用app('stormpath.user');

访问用户详细信息

因为我正在使用Laravel 5.1
我必须从$token = $request->bearerToken(); <{1}}

vendor/stormpath/laravel/src/Http/Middleware/Authenticate.php发表评论public function isAuthenticated(Request $request)