繁体   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