簡體   English   中英

Laravel API無法登錄

[英]Laravel API having trouble logging in

我有以下兩種方法可以在我的API創建和登錄用戶。 我無法登錄用戶。 這些文件位於路由文件夾中的api.php中。 如果我不User::Create()方法中的bcrypt($password) ,它似乎仍然會以某種方式對密碼進行哈希處理: User::Create()方法會自動對密碼進行哈希處理。 我想知道它是否以某種方式被雙散列。

Route::post('/register', function( Request $request){
    $rules = [
        'name' => 'required|max:255|alpha_dash|unique:users',
        'email' => 'required|email|max:255|unique:users',
        'password' => 'required|confirmed|min:6',
    ];
    $input = $request->only(
        'name',
        'email',
        'password',
        'password_confirmation'
    );
    $validator = Validator::make($input, $rules);
    if($validator->fails()) {
        $error = $validator->messages();
        return response()->json(['success'=> false, 'error'=> $error]);
    }

    $name = $request->name;
    $email = $request->email;
    $password = $request->password;
    $user = User::create(['name' => $name, 'email' => $email, 'password' => bcrypt($password), 'api_token' => md5($email)]);

    return response()->json(['success'=> true, 'data'=> $user]);

});

Route::post("/login", function (Request $request){

    $rules = [
        'email' => 'required|email',
        'password' => 'required',
    ];

    $input = $request->only('email', 'password');

    $validator = Validator::make($input, $rules);

    if($validator->fails()) {
        $error = $validator->messages();
        return response()->json(['success'=> false, 'error'=> $error]);
    }


        $email = $request->email;
        $password =  bcrypt($request->password);



    if(\Auth::Attempt(['email' => $email, 'password' => $password])){
        ///How to get USER to return with Response
        return response()->json(['success' => true]);

    }else{
        return response()->json(['success' => false, 'error' => 'Invalid Credentials', 'password' => $password, 'email' => $email]);
    }

});

bcrypt($request->password)但如果您Auth::Attempt(['email' => $email, 'password' => $password]) ,laravel會自動對值進行哈希處理。 因此,只需在您的登錄路徑中嘗試$password = $request->password;

從文檔:

try方法接受鍵/值對的數組作為其第一個參數。 數組中的值將用於在數據庫表中查找用戶。 因此,在上面的示例中,將通過email列的值來檢索用戶。 如果找到用戶,則將存儲在數據庫中的哈希密碼與通過數組傳遞給該方法的密碼值進行比較。 您不應該對指定為密碼值的密碼進行哈希處理,因為在將其與數據庫中的哈希密碼進行比較之前,框架會自動對其進行哈希處理。 如果兩個哈希密碼匹配,則將為用戶啟動經過身份驗證的會話。

這就是我想出的“登錄用戶”的方法。

Route::post("/login", function (Request $request){

    $rules = [
        'email' => 'required|email',
        'password' => 'required',
    ];

    $input = $request->only('email', 'password');

    $validator = Validator::make($input, $rules);

    if($validator->fails()) {
        $error = $validator->messages();
        return response()->json(['success'=> false, 'error'=> $error]);
    }


   $email = $request['email'];
   $password = $request['password'];
   $user = User::where('email', $email)->first();
    if($user){
       if(\Hash::check($password, $user->password)){
           return response()->json(['success' => true, 'user' => $user]);
       }else{
           return response()->json(['success' => false, 'error' => 'Invalid Credentials']);
       }
    }else{
        return response()->json(['success' => false, 'error' => 'Invalid Credentials']);
    }

});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM