我正在尝试将前端HTML模板与后端Laravel应用程序结合使用 . 我正在尝试将默认的注册和登录表单移动到模板模式弹出注册/登录表单中 .
登录部分按预期工作,无需修改原始控制器或路由 .
但是,注册似乎主要是工作,而不是有时重新定向到 example.com/path
注册后它显示
抱歉,找不到您要查找的页面 .
奇怪的是,它有时让我注册,然后停止工作其他时间 .
RegistersUsers.php
<?php
namespace Illuminate\Foundation\Auth;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Auth\Events\Registered;
trait RegistersUsers
{
use RedirectsUsers;
public function showRegistrationForm()
{
return view('auth.register');
}
public function register(Request $request)
{
$this->validator($request->all())->validate();
event(new Registered($user = $this->create($request->all())));
$this->guard()->login($user);
return $this->registered($request, $user)
?: redirect($this->redirectPath());
}
protected function guard()
{
return Auth::guard();
}
protected function registered(Request $request, $user)
{
//
}
}
RegisterController.php
<?php
namespace App\Http\Controllers\Auth;
use App\Models\User;
use App\Http\Controllers\Controller;
use Illuminate\Auth\Events\Registered;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;
use Jrean\UserVerification\Traits\VerifiesUsers;
use Jrean\UserVerification\Facades\UserVerification;
use Illuminate\Http\Request;
use MetaTag;
class RegisterController extends Controller
{
use RegistersUsers;
use VerifiesUsers;
protected $redirectTo = '/';
public function __construct()
{
$this->middleware('guest');
}
protected function validator(array $data)
{
return Validator::make($data, [
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:6|confirmed',
]);
}
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
}
protected function redirectTo() {
return '/path';
}
public function showRegistrationForm()
{
MetaTag::set('title', __("Register"));
session()->put('from', request('redirect')?:url()->previous());
return view('auth.register');
}
public function register(Request $request)
{
$this->validator($request->all())->validate();
$user = $this->create($request->all());
event(new Registered($user));
$this->guard()->login($user);
$user->username = $request->get('name');
$user->save();
UserVerification::generate($user);
UserVerification::send($user, __('Welcome and Email Verification'));
$user->assignRole('member'); //make a member
return $this->registered($request, $user)
?: redirect(session()->pull('from',$this->redirectPath()));
}
}
1 回答
你有两个选择:
如果要使用默认行为(=已注册后重定向),可以将函数
redirectPath
的返回值更改为相应的路径 .如果您想要其他行为(例如返回json ...),您可以更改函数
registered
的内容 .请注意,根据您的返回值,会有不同的行为:
如果在转换为布尔值时返回值为
true
的值:将被视为响应 .如果在转换为布尔值时返回值为
false
的值:将 not 视为响应,并且laravel将回退以重定向redirectPath
函数的值(如1.) .如果您想在用户注册后执行某些操作但仍使用默认重定向,则此行为非常有用 .