#laravel #login #routes
#laravel #аутентификация #маршруты
Вопрос:
После заполнения формы я хочу, чтобы пользователь сначала перенаправлялся на страницу, в содержимом которой является успешная регистрация. Теперь проблема в том, что он автоматически перенаправляется пользователю mypage
.
Модель ПОЛЬЗОВАТЕЛЯ
public function register($data){
try {
$this->name = $data['name'];
$this->email = $data['email'];
$this->password = $data['password'];
$this->save();
return $this;
} catch (Exception $e) {
Log::error(get_class().':register(): '.$e->getMessage());
return false;
}
}
Auth RegisterController
public function registComplete(User $user){
$data = Session::get('user');
$data['password'] = Hash::make($data['password']);
$rtn = $user->register($data);
Auth::guard('user')->login($rtn);
return redirect('/regist/complete');
}
в моем /regist/complete
маршруте указано на функцию, которая будет отображать страницу благодарности. И оттуда пользователь может нажать кнопку, чтобы быть перенаправленным пользователям mypage
, это будет единственный раз, когда они могут быть перенаправлены.
Вид
<div class="regist_cont">
<div class="rgstdn_message">
<p class="redbig_message">Thanks for registering.</p>
<p>You can now visit your profile</p>
</div>
<a class="btn btn_red" href="{{ url('/mypage') }}">MY PAGE</a>
</div>
Если я удалю Auth::guard('user')->login($rtn);
, пользователь не войдет в систему автоматически. Но я не могу заставить их войти в систему при нажатии кнопки mypage. Как я могу этого добиться?
Ответ №1:
Вы можете добавить нижеприведенную строку на свой контроллер
protected $redirectTo = '/regist/complete';
это перезапишет перенаправление по умолчанию на вашу страницу
Комментарии:
1. Тогда как я могу войти в систему пользователя, если он нажмет кнопку gotomypage?
2. Контроллер не является подходящим местом для проверки подлинности пользователя или нет. Для этого вы должны использовать промежуточное программное обеспечение. Чтобы получить информацию о том, что такое промежуточное программное обеспечение, проверьте здесь laravel.com/docs/master/middleware
3. вы можете просто использовать этот метод в своем классе промежуточного программного обеспечения:
public function handle($request, Closure $next) { //check here if the user is authenticated if ( ! $this->auth->user() ) { // here you should redirect to login } return $next($request); }
4. вам также необходимо внести изменения в свой
Route
Ответ №2:
После изучения я могу сделать это с помощью Session
.
Auth RegisterController
public function registComplete(User $user){
$data = Session::get('user');
$data['password'] = Hash::make($data['password']);
$rtn = $user->register($data);
Session::put('log', $rtn);
Session::save();
return redirect('/regist/complete');
}
public function registSuccess(){
Auth::guard('user')->login(Session::get('log'));
return view('user.register.registComplete');
}
Поскольку я также использую учетные записи в социальных сетях, я делаю это в my UserController
при перенаправлении на mypage.
public function index()
{
if(Session::exists('log')){
Session::forget('log');
}
return view('user.dashboard')->with([
'user' => Auth::user(),
]);
}
На данный момент я могу добиться того, чего хочу. Если у вас есть другой лучший подход, я тоже открыт для этого.