【问题标题】:Laravel 5.4 AuthenticationLaravel 5.4 身份验证
【发布时间】:2017-09-02 17:22:59
【问题描述】:

我正在尝试创建登录表单及其控制器,但是当我尝试登录时它不起作用任何人都可以帮助我我是 laravel 的新手。

这是我的表格

<form action="/login" method="post">
        {{ csrf_field() }}

        <div class="form-group has-feedback">
            <input type="email" name="email" class="form-control" placeholder="Email">
            <span class="glyphicon glyphicon-envelope form-control-feedback"></span>
        </div>
        <div class="form-group has-feedback">
            <input type="password" name="password" class="form-control" placeholder="Password">
            <span class="glyphicon glyphicon-lock form-control-feedback"></span>
        </div>
        <div class="row">
            <div class="col-xs-7">
                <div class="checkbox">
                    <label>
                        <input type="checkbox"> Remember Me
                    </label>
                </div>
            </div>
            <!-- /.col -->
            <div class="col-xs-5">
                <button type="submit" class="btn btn-primary btn-raised btn-block ">Sign In</button>
            </div>
            <!-- /.col -->
        </div>
    </form>

这是我的路线

Route::get('/login', 'loginController@create');
Route::post('/login', 'loginController@store');

我的 loginController 是

class loginController extends Controller
{
    public function __construct(){
        $this->middleware('guest', ['except' => 'destroy']);
    }

   public function create(){

       return view('pages.admin.login');
   }


    public function store(){

       if(! auth()->attempt(request(['email', 'password']))){
            return back()->withErrors([
                'message' => 'Please check your credentials'
            ]);
        }

        return redirect('/home');
    }


}

我的用户模式是

    class User extends Authenticatable
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'fname','oname','lname', 'email', 'phone','password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];
}

请问我在哪里做错了,当我输入电子邮件和密码作为我的凭据时,它只是刷新并返回登录页面

【问题讨论】:

  • 请添加错误信息
  • 它不会抛出错误

标签: php laravel laravel-5.3 laravel-5.4


【解决方案1】:

auth()-&gt;attempt() 需要一个数组,您将 request() 的返回值作为单个参数发送,可能是这样吗?

【讨论】:

    【解决方案2】:

    你的函数应该是这样的Request门面。

      public function store(Request $request){
    
       if(! auth()->attempt($request->only(['email', 'password']))){
            return back()->withErrors([
                'message' => 'Please check your credentials'
            ]);
        }
    
        return redirect('/home');
        }
    

    【讨论】:

    • 它还是一样,我改变和修改它,但还是一样,它不起作用
    【解决方案3】:

    你的尝试函数应该是这样的:

    if(Auth::attempt( ['email'=> $request['email'],'password' => $request['password'] ])
    

    【讨论】:

    • SQLSTATE[42S22]:找不到列:1054 'where 子句'中的未知列'example@gmail'(SQL:从users 中选择*,其中example@gmail = 和bxndbnbsd 为空限制 1)
    • 即使我有电子邮件和密码字段,它也会给我这个错误
    • 显然查询不正确,注意 sql 查询它说 where example@gmail = 而不是 email=....
    • 为什么 store() 里面没有请求对象?商店(请求 $request)?
    • 我通过了它们,当我输入电子邮件和密码时,它会刷新然后返回登录页面,但如果我通过更改 redirect->back();使用有效页面,它会转到该页面
    【解决方案4】:

    将这些添加到LoginController之上

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

    并修改您的 store 方法

    public function store(Request $request){
    
        $email = $request->email;
        $password = $request->password;
    
        if (! Auth::attempt(['email' => $email, 'password' => $password])) {
            // Authentication Failed...
            return back()->withErrors([
                'message' => 'Please check your credentials'
            ]);
        }
    
        return redirect('/home');
    }
    

    同时在您的 User 模型中从 $hidden 中删除 password

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'remember_token',
    ];
    

    希望对你有帮助。

    【讨论】:

      【解决方案5】:

      您可以使用 php artisan make:auth 和 laravel 将生成登录所需的一切,包括控制器,然后您可以进入您的资源并进行编辑以使其看起来像您想象的那样。

      这是使用 php artisan make:auth 后我的登录控制器的样子

      <?php
      
      namespace App\Http\Controllers\Auth;
      
      use App\Http\Controllers\Controller;
      use Illuminate\Foundation\Auth\AuthenticatesUsers;
      
      class LoginController extends Controller
      {
      
      
          use AuthenticatesUsers;
      
          /**
           * Where to redirect users after login.
           *
           * @var string
           */
          protected $redirectTo = '/home';
      
          /**
           * Create a new controller instance.
           *
           * @return void
           */
          public function __construct()
          {
              $this->middleware('guest')->except('logout');
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-12-24
        • 2017-08-12
        • 2017-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-21
        相关资源
        最近更新 更多