当前位置: 首页 > 知识库问答 >
问题:

Laravel 5双向表登录

翟泰
2023-03-14

我试图配置一个laravel 5应用程序,将登录用户基于他们的用户名与密码,如果用户名和密码方法失败的应用程序将尝试检查其他表,如果用户名变量中的数据可用在我的情况下他们的employee_id。下面是我用传统laravel方法登录用户的代码:

 $authdetails = array(
            'email' => $request->input('email'),
            'password' => $request->input('password')
         );
         if (Auth::attempt($authdetails)) {
             // Authentication passed...
             return redirect()->to('/home');
         }
        else {
              return back()->with('error', 'Invalid username or password')->withInput();
          }
     }

数据库中有两个表。(1) 用户,(2)userdetails,用户表包含标准的laravel用户默认迁移表,userdetails表包含用户的详细信息。登录身份验证的第一种方法使用users表,如果第一种方法失败,我想实现的第二种登录方法使用userdetails表。

我想做的是,如果登录的第一个方法失败,它将搜索另一个表中传递的变量的值,如果有,那么它将对其进行身份验证。

共有2个答案

仲孙鸿畴
2023-03-14

如果您想在第一个表身份验证失败时使用两个不同的表登录。你必须在这里和这里使用多身份库。

然后像这样使用。

$authdetails = array(
        'email' => $request->input('email'),
        'password' => $request->input('password')
     );
     if (Auth::user1()->attempt($authdetails)) {
         // Authentication passed...
         return redirect()->to('/home1');
     }
     if (Auth::user2()->attempt($authdetails)) {
         // Authentication passed...
         return redirect()->to('/home2');
     }
    else {
          return back()->with('error', 'Invalid username or password')->withInput();
      }
 }
督弘化
2023-03-14

如果在用户表中有employee_id列,那么就很容易了。您只需尝试使用两组凭据进行身份验证。

public function postLogin(Request $request) {
    $this->validate($request, [
        'usernameOrEmployeeId' => 'required',
        'password'             => 'required',
    ]);

    // Attempt login via username
    $credentials = [
        'username' => $request->input('usernameOrEmployeeId'),
        'password' => $request->input('password'),
    ];
    if (Auth::attempt($credentials, $request->has('remember'))) {
        return redirect()->intended($this->redirectPath());
    }

    // Swap username and employee_id
    $credentials['employee_id'] = $request->input('usernameOrEmployeeId');
    unset($credentials['username']);

    // Attempt login via employee_id
    if (Auth::attempt($credentials, $request->has('remember'))) {
        return redirect()->intended($this->redirectPath());
    }

    // Login attempts failed
    return redirect($this->loginPath())
        ->withInput($request->only('usernameOrEmployeeId', 'remember'))
        ->withErrors([
            'usernameOrEmployeeId' => $this->getFailedLoginMessage(),
        ]);
}

如果在用户表中没有employee\u id列,那么就有点困难了。您将使用与上述相同的代码,除非您将替换此部件:

// Swap username and employee_id
$credentials['employee_id'] = $credentials['username'];
unset($credentials['username']);

比如说:

// Find user_id by looking up the employee relationship
$employee = App\Employee::findOrFail($request->input('usernameOrEmployeeId'));
$credentials['id'] = $employee->user->id;
unset($credentials['username']);

不要忘记unset()。这一点很重要,因为如果您将用户名保留在数组中,Laravel将尝试使用所有3条信息进行身份验证,并且将始终失败,因为我们已经知道用户名/密码不匹配。

此外,您不必使用任何第三方库。这是一个具有相对简单解决方案的简单问题。

 类似资料:
  • 我正在处理一项要求,即在记录更新/插入后发送电子邮件,其中我将页面URL作为“单击此处”文本发送,当用户单击该链接时,无论用户是否登录,他都将被重定向到该页面。 现在,如果用户已经登录,则该页面将正常打开,但如果用户未登录,则需要在登录后重定向回上一页。 我的问题在这里是我无法重定向回上一页用户试图访问之前登录通过点击这里链接从电子邮件 我已经找到了一些解决方案,但它们都不起作用。我尝试过的解决方

  • 本文向大家介绍双向链表和双向循环链表?相关面试题,主要包含被问及双向链表和双向循环链表?时的应答技巧和注意事项,需要的朋友参考一下 双向链表: 包含两个指针,一个prev指向前一个节点,一个next指向后一个节点。 双向循环链表: 最后一个节点的 next 指向head,而 head 的prev指向最后一个节点,构成一个环。

  • 主要内容:双向链表的创建目前我们所学到的 链表,无论是动态链表还是 静态链表,表中各节点中都只包含一个指针(游标),且都统一指向直接后继节点,通常称这类链表为 单向链表(或 单链表)。 虽然使用单链表能 100% 解决逻辑关系为 "一对一" 数据的存储问题,但在解决某些特殊问题时,单链表并不是效率最优的存储结构。比如说,如果算法中需要大量地找某指定结点的前趋结点,使用单链表无疑是灾难性的,因为单链表更适合 "从前往后"

  • 双向链表 结构体 struct   rt_list_node   双向链表节点 更多...   宏定义 #define  rt_container_of(ptr, type, member)   ((type *)((char *)(ptr) - (unsigned long)(&((type *)0)->member)))   获取type结构体中member成员在这个结构体中的偏移   #de

  • 双向链表 Linux 内核自己实现了双向链表,可以在 include/linux/list.h 找到定义。我们将会从双向链表数据结构开始内核的数据结构。为什么?因为它在内核里使用的很广泛,你只需要在 free-electrons.com 检索一下就知道了。 首先让我们看一下在 include/linux/types.h 里的主结构体: struct list_head { struct l

  • 我正在尝试交换双链接列表中的两个节点。下面是具有交换功能的程序部分。 当我运行这个程序时,在第一个和第二个节点的情况下,它崩溃了。而在任何其他节点的情况下,它提供无限循环输出。(例如:-2- 我知道还有一些关于节点交换的问题,但是我没有找到任何与我的问题相似的问题。请帮帮我...!! 提前谢谢。