我正在尝试为我的网络应用程序构建一个登录系统,但我无法让Passport工作。该应用程序是作为REST API构建的,因此用户应该能够使用电子邮件和密码进行注册,之后他们应该能够使用这些凭据登录(因此我认为他们需要从Passport接收访问令牌)登录凭据是正确的)。
我以为我可以在'注册'路线上做一个JSON帖子来注册一个新用户,然后发一个帖子到'登录'路由以获取访问令牌回到客户端,但是没有这样的东西据我所知。
如何注册新用户?
答案 0 :(得分:0)
如果您正在构建 SPA 并使用默认的 Laravel 注册、登录、忘记密码和重置密码网络功能(例如 Google Account 进行身份验证和授权),您可以使用以下命令覆盖 App\Http\Controllers\Auth\RegisterController.php
上的注册方法存在预期 url 时的重定向逻辑。
这行告诉 Laravel 查看预期的 url,先导航到 Web 注册控制器重定向路径。
/**
* The user has been registered.
*
* @param \Illuminate\Http\Request $request
* @param mixed $user
* @return mixed
*/
protected function registered(Request $request, $user)
{
if ($request->session()->has('url.intended')) {
return redirect()->intended();
}
}
例如,我在 Vue.js SFC 上使用带有 PKCE 授权的授权代码
<template>
<v-app-bar app flat>
<button-login @login="authorize"></button-login>
<span>|</span>
<button-register @register="authorize"></button-register>
</v-app-bar>
</template>
<script>
import ButtonLogin from '@/components/Buttons/ButtonLogin'
import ButtonRegister from '@/components/Buttons/ButtonRegister'
import { base64URL, encrypt, hashMake, randomString } from '@/helpers'
import sha256 from 'crypto-js/sha256'
import httpBuildQuery from 'http-build-query'
import { SERVICE } from '@/config/services'
import { STORAGE_API_AUTHORIZATION_STATE, STORAGE_API_CODE_VERIFIER } from '@/config/storage'
export default {
name: 'AppBar',
components: {
ButtonLogin,
ButtonRegister
},
authorize() {
const authorizationState = randomString(40)
const codeVerifier = randomString(128)
const codeChallenge = base64URL(sha256(codeVerifier))
const query = httpBuildQuery({
client_id: SERVICE.CLIENT_ID,
redirect_uri: authorizationURL,
response_type: 'code',
scope: '*',
state: authorizationState,
code_challenge: codeChallenge,
code_challenge_method: 'S256'
})
localStorage.setItem(
STORAGE_API_AUTHORIZATION_STATE,
hashMake(authorizationState)
)
localStorage.setItem(
STORAGE_API_CODE_VERIFIER,
encrypt(codeVerifier, authorizationState)
)
location.href = `${SERVICE.API_URL}/oauth/authorize?${query}`
}
}
</script>
每当用户点击我的 SPA 上的登录/注册按钮时,它都会重定向到我的 API OAuth 授权页面。
身份验证中间件将拦截请求并检查用户的登录状态,如果用户未通过身份验证,则将用户重定向到登录页面。
如果用户选择通过点击注册按钮注册他/她的帐户,我们会将用户重定向到网络注册页面(仍在 API 而非 SPA 上)。
在用户注册后,控制器将调用注册方法并检查预期的 URL 是否存在,如果存在则我们能够将用户重定向到预期的 url(oauth/authorize
端点),并且授权过程可以注册完成后继续。
答案 1 :(得分:-1)
我在这里面临同样的问题,到目前为止,我发现最好的解决方案是通过创建UserController和这样的存储方法手动创建注册方法
public function store(Request $request) {
$data=$request->only('name', 'email','password');
$valid = validator(
$data, [
'name' => 'required|string|max:255',',
'email' => 'required|string|email|max:155|unique:users',
'password' => 'required|string|min:4',
]);
$return=null;
if ($valid->fails()) {
$return = response()->json($valid->errors()->all(), 400);
}else{
$data['password']=Hash::make($data['password']);
#return = User::create($data);
}
return $return;
}