【问题标题】:Laravel: can't redirect to the correct page after submitting formLaravel:提交表单后无法重定向到正确的页面
【发布时间】:2018-09-17 10:33:50
【问题描述】:

所以我有一个问题,在用户通过将他们的详细信息提交到数据库进行注册后,我似乎无法让它重定向到仪表板。相反,我在 Firefox 中收到此消息:“由于不活动,该页面已过期。请刷新并重试。”并且在 url 中它没有说 /dashboard 它说 /signup。

这是我的 web.php 路由

Route::get('/', function () {
    return view('user/usersignup');
});


Route::post('/signup', [
    'uses' => 'UserController@postSignUp',
    'as' => 'signup'
]);

Route::post('/signin', [
    'uses' => 'UserController@postSignIn',
    'as' => 'signin'
]);

Route::get('/dashboard', [
    'uses' => 'UserController@getDashboard',
    'as' => 'dashboard'
]);

这是 UserController,我的控制器。

<?php

namespace App\Http\Controllers;

use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

    class UserController extends Controller
    {
       public function getDashboard(){
           return view('dashboard');
       }

       public function postSignUp(Request $request){
           $first_name = $request['first_name'];
           $email = $request['email'];
           $password = bcrypt($request['password']);

           $user= new User();
           $user->first_name = $first_name;
           $user->email = $email;
           $user->password = $password;

           $user->save();
           return redirect()->route('dashboard');
       }
    }

这是我的注册视图:usersignup.blade.php

  <form action="{{ route('signup') }}" method="post" id="userform">

     <div class="form-group">
        <label for="first_name">Your first Name</label>
        <input class="form-control" type="text" name="first_name" id="fullname">
     </div>

     <div class="form-group">
         <label for="email">Your E-Mail</label>
         <input class="form-control" type="text" name="email" id="email">
     </div>

     <div class="form-group">
         <label for="password">Your Password</label>
         <input class="form-control" type="password" name="password" id="password">
     </div>
     <button type="submit" class="btn btn-primary">Submit</button>
     <input type="hidden" name="_token" value="{{ Session::token() }}">
 </form>

【问题讨论】:

  • 使用的 Laravel 版本是什么?
  • 我最近才拿到它,所以我认为它是5.6
  • 关注 C2486 答案。

标签: php html css laravel blade


【解决方案1】:

你使用了错误的CSRF

&lt;form&gt;标签内使用{{ csrf_field() }}并删除隐藏元素name="_token"

<form action="{{ route('signup') }}" method="post" id="userform">
{{ csrf_field() }}
.....
.....
<button type="submit" class="btn btn-primary">Submit</button>
</form>

或者将隐藏元素_token的值替换为csrf_token()

<form action="{{ route('signup') }}" method="post" id="userform">
.....
.....
<button type="submit" class="btn btn-primary">Submit</button>
<input type="hidden" name="_token" value="{{ csrf_token() }}">
</form>

【讨论】:

  • 我现在收到此错误:SQLSTATE[23000]: 完整性约束违规:1048 列“first_name”不能为空(SQL:插入usersfirst_nameemail,@987654332 @, updated_at, created_at) 值(...),我在表单中将 fullname 更改为 first_name 但仍然遇到问题。
  • 恭喜您之前的问题已解决。为此,您需要为 first_name 提供值,或者您必须为此列设置默认值
  • 那是我在文本字段中输入名称但它说我没有给出值我不知道为什么。
  • 像这样使用 $first_name = $request-&gt;first_name;$request 获取值
  • 我仍然遇到同样的问题,我认为这只是写同一件事的不同方式。
【解决方案2】:

在表单中添加一个 csrf 字段而不是隐藏的 _token 输入:

<form action="{{ route('signup') }}" method="post" id="userform">
     {{ csrf_field() }}

     <div class="form-group">
        <label for="fullname">Your Full Name</label>
        <input class="form-control" type="text" name="fullname" id="fullname">
     </div>

     <div class="form-group">
         <label for="email">Your E-Mail</label>
         <input class="form-control" type="text" name="email" id="email">
     </div>

     <div class="form-group">
         <label for="password">Your Password</label>
         <input class="form-control" type="password" name="password" id="password">
     </div>
     <button type="submit" class="btn btn-primary">Submit</button>
 </form>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-15
    • 1970-01-01
    • 2017-04-30
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 2014-03-10
    相关资源
    最近更新 更多