Laravel Stormpath 无法访问用户对象
Laravel Stormpath not able to access User Object
我正在使用 Laravel 和 Stormpath 进行用户管理。我能够使用 AJAX
成功注册和登录用户。
成功登录后,只有 url 返回到 AJAX,但登录后,当我转到用户特定页面时,我无法获取用户数据。
注册和登录发生在 RegisterController
用户页面使用 UserController
呈现
我尝试使用
获取用户数据
$user = app('stormpath.user');
在 UserController 中,但是当我这样做时 dd($user)
null
被返回。
如何在其他Controller中登录或注册成功后持久化或获取用户数据?
感谢任何帮助!提前致谢!
对于 Stormpath Laravel 集成,当您 运行 AJAX 调用时,我们不会设置任何 cookie。我们在 header 响应中为您提供 JWT,您需要查看并自行存储它们。然后 JWT 将需要作为 Bearer 令牌附加到所有其他请求,这将允许您使用 `$user = app('stormpath.user') 方法从 JWT 中获取用户信息。
我终于让一切正常了。谢谢@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
我不得不从函数 public function isAuthenticated(Request $request)
中注释掉 vendor/stormpath/laravel/src/Http/Middleware/Authenticate.php
中的 $token = $request->bearerToken();
我正在使用 Laravel 和 Stormpath 进行用户管理。我能够使用 AJAX
成功注册和登录用户。
成功登录后,只有 url 返回到 AJAX,但登录后,当我转到用户特定页面时,我无法获取用户数据。
注册和登录发生在 RegisterController
用户页面使用 UserController
我尝试使用
获取用户数据$user = app('stormpath.user');
在 UserController 中,但是当我这样做时 dd($user)
null
被返回。
如何在其他Controller中登录或注册成功后持久化或获取用户数据?
感谢任何帮助!提前致谢!
对于 Stormpath Laravel 集成,当您 运行 AJAX 调用时,我们不会设置任何 cookie。我们在 header 响应中为您提供 JWT,您需要查看并自行存储它们。然后 JWT 将需要作为 Bearer 令牌附加到所有其他请求,这将允许您使用 `$user = app('stormpath.user') 方法从 JWT 中获取用户信息。
我终于让一切正常了。谢谢@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
我不得不从函数 public function isAuthenticated(Request $request)
vendor/stormpath/laravel/src/Http/Middleware/Authenticate.php
中的 $token = $request->bearerToken();