Laravel login on mobile without password: "Column not found: 1054 Unknown column 'password' in 'field list'"

huangapple go评论54阅读模式
英文:

Laravel login on mobile without password: "Column not found: 1054 Unknown column 'password' in 'field list'"

问题

以下是您要翻译的内容:

当我登录时,我收到这个错误。

LoginController.php

public function login(Request $request)
{
    $credentials = $request->only('mobile');

    if (Auth::attempt($credentials)) {
        // Authentication passed...
        return redirect()->route('home');
    }

    // User doesn't exist, create a new one
    $user = User::create($credentials);

    Auth::login($user);

    return redirect()->route('home');
}

这个错误发生在以下代码行:

if (Auth::attempt($credentials)) {

以及

我在注册表单和登录表单中都有一个字段,即“mobile”(无密码)。

我该如何设计表单,以便如果用户表数据库中存在手机号码,就会登录。如果不存在,就创建它。

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'password' in 'field list'

public function login(Request $request)
{
    $credentials = $request->only('mobile');
    $credentials['password'] = 'default_password';

    if (Auth::attempt($credentials)) {
        // Authentication passed...
        return redirect()->route('home');
    }

    // User doesn't exist, create a new one
    $user = User::create($credentials);

    Auth::login($user);

    return redirect()->route('home');
}

我想要仅通过手机号码登录,无需密码。

英文:

When I login, I get this error.

LoginController.php

public function login(Request $request)
{
    $credentials = $request->only('mobile');

    if (Auth::attempt($credentials)) {
        // Authentication passed...
        return redirect()->route('home');
    }

    // User doesn't exist, create a new one
    $user = User::create($credentials);

    Auth::login($user);

    return redirect()->route('home');       
}

This error occurred at the following line:

if (Auth::attempt($credentials)) {

And

I have a field, the mobile, (and without password) in both the registration form and the login form.

How can I design the form in such a way that if the mobile number is present in the user table database, it will login. If it doesn't exist, create it.

> SQLSTATE[42S22]: Column not found: 1054 Unknown column 'password' in 'field list'

public function login(Request $request)
{
    $credentials = $request->only('mobile');
    $credentials['password'] = 'default_password';

    if (Auth::attempt($credentials)) {
        // Authentication passed...
        return redirect()->route('home');
    }

    // User doesn't exist, create a new one
    $user = User::create($credentials);

    Auth::login($user);

    return redirect()->route('home');
}

I want to login without a password only on mobile.

答案1

得分: 2

Laravel 期望一个名为 password 的字段用于其 Auth::attempt() 方法,当你执行 $user = User::create($credentials); 时,如果你的 users 表中没有一个密码字段,将会抛出错误。

你可以使用其他方式来登录用户,比如 Auth::login()Auth::loginUsingId() 来绕过这个问题。

假设你的用户表看起来像这样:

+------------+
| users      |
+------------+
| id (pk)    |
| mobile     |
| timestamps |
+------------+
public function login(Request $request)
{
    $mobile = $request->mobile;

    $user = User::firstOrCreate(['mobile' => $mobile]);

    Auth::login($user);

    return redirect()->route('home');
}

你甚至可以通过在请求上使用 validate() 方法来添加一些验证。

public function login(Request $request)
{
    $data = $request->validate(['mobile' => ['required']]);

    $user = User::firstOrCreate($data);

    Auth::login($user);

    return redirect()->route('home');
}

如果你使用了 @error Blade 指令,这将抛出一个 ValidationException,应该可以在视图上很好地呈现。

英文:

Laravel expects a field named password for it's Auth::attempt() method and when you do $user = User::create($credentials);, if your users table does not have a password field you will get an error thrown.

You could use another way to login your user such as Auth::login() or Auth::loginUsingId() to bypass that.

Assuming your user table looks like this:

+------------+
| users      |
+------------+
| id (pk)    |
| mobile     |
| timestamps |
+------------+
public function login(Request $request)
{
    $mobile = $request->mobile;

    $user = User::firstOrCreate(['mobile' => $mobile]);

    Auth::login($user);

    return redirect()->route('home');
}

You can even add a bit of validation by using the validate() method on the request.

public function login(Request $request)
{
    $data = $request->validate(['mobile' => ['required']]);

    $user = User::firstOrCreate($data);

    Auth::login($user);

    return redirect()->route('home');
}

This will throw a ValidationException that should render nicely on the view if you're using the @error blade directive

huangapple
  • 本文由 发表于 2023年4月4日 07:02:33
  • 转载请务必保留本文链接:https://go.coder-hub.com/75924325.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定