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

使用auth laravel 5.7自定义登录和注册

竺鸿骞
2023-03-14

我试图创建Laravel 5.7的第一个项目。

在这个项目中,我有三个不同的领域和三个不同的登录(例如,用户登录,管理员登录,技术人员登录)

现在,我想自定义第一次登录(url,html,输入,类,数据库表,数据库列ecc...),但我不知道该怎么做。

第一次登录的URL是网站。com/public/users

我的桌子是:

CREATE TABLE `gf_users` (
  `gf_id` int(11) NOT NULL,
  `gf_name` text NOT NULL,
  `gf_email` varchar(200) NOT NULL,
  `gf_password` varchar(300) NOT NULL,
) 

我已经搜索了很多,用我找到的信息,我试图这样做:

config/auth。php:

return [

    'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],

    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
        ],
    ],

    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\GFUsers::class
        ],
    ],

    'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
        ],
    ],

];

网状物php

Route::get('users', 'Auth\LoginController@showLoginFormUsers')->name('login');
Route::post('users', 'Auth\LoginController@login');

登录控制器。php

public function showLoginFormUsers(){
   return view('users.login');
}

public function username(){
   return 'gf_email';
}

GFU用户。php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;

class GFUsers extends Authenticatable
{
    use Notifiable;

    protected $table = 'gf_users';
    protected $primaryKey = 'gf_id';

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'gf_email', 'gf_password',
    ];

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


    public function getAuthPassword(){
        return $this->gf_password;
    }
}

登录。刀身php

<form method="POST" action="{{ asset('/users') }}">
@csrf
  <div class="form-group">
    <input type="email" class="form-control" name="gf_email" id="gf_email" placeholder="Email" required>
  </div>
  <div class="form-group">
    <input type="password" class="form-control" name="gf_password" id="gf_password" placeholder="Password" required>
  </div>
  <button type="submit" class="btn btn-primary">LOGIN</button>
</form>

如果我编译表单并点击登录按钮,这会刷新页面,但我不知道它是否有效

1.程序正确吗?
2.有一些错误吗?
3.我是不是忘了什么?
4.我可以为注册做些什么?

共有3个答案

孙成益
2023-03-14

您最好不要为用户、管理员和技术人员创建不同的表。他们都是用户。在一个表中,仅使用不同属性(例如-角色、状态、is_管理员、is_用户…)。

俞学
2023-03-14

经过长时间的研究,我找到了解决办法。我希望这能帮助别人
我已自定义:id、用户名、密码和表中的记忆令牌以及用户文件。php,LoginController。php

==表==:

CREATE TABLE `gf_users` (
  `gf_id` int(11) NOT NULL,
  `gf_name` text NOT NULL,
  `gf_email` varchar(200) NOT NULL,
  `gf_password` varchar(300) NOT NULL,
  `gf_remember_token` varchar(300) NOT NULL
) 

网状物php:

// Authentication Routes
Route::get('users', 'Auth\NewLoginController@showLoginFormUsers')->name('login');
Route::post('users', 'Auth\NewLoginController@checklogin');
Route::post('logout', 'Auth\NewLoginController@logout')->name('logout');
// Registration Routes
Route::get('users/registration', 'Auth\RegisterController@showRegistrationFormUsers')->name('register');
Route::post('users/registration', 'Auth\RegisterController@register');

NewLoginController。php:

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Support\Facades\Auth;
use Illuminate\Http\Request;

class LoginController extends Controller
{

    use AuthenticatesUsers;
    protected $redirectTo = '/users/details';

    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }
    
    
    public function showLoginFormUsers(){
        return view('users.login');
    }
    
    public function username(){
        return 'gf_email';
    }
    
    function checklogin(Request $request){
        
        $this->validate($request, [
            'input-email' => 'required', 
            'input-password' => 'required',
        ]);
        
        $user_data = array(
            'gf_email'  => $request->get('input-email'),
            'password' => $request->get('input-password')
        );
        
        if(!Auth::attempt($user_data)){
            return redirect('users');
        }
        
        if ( Auth::check() ) {
            return redirect('users/details');
        }
    }
    
    function logout(){
        Auth::logout();
        return redirect('users');
    }

}

NewUser.php:

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use Notifiable;
    protected $table = 'gf_users';
    protected $primaryKey = 'gf_id';
    public $timestamps = false; 
    
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'gf_email', 'gf_password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'gf_password', 'gf_remember_token',
    ];
    
    /**
     * Get the password for the user.
     *
     * @return string
     */
    public function getAuthPassword(){
        return $this->gf_password;
    }
    
    /**
     * Get the token value for the "remember me" session.
     *
     * @return string
     */
    public function getRememberToken()
    {
        return $this->gf_remember_token;
    }
    
    /**
     * Set the token value for the "remember me" session.
     *
     * @param  string  $value
     * @return void
     */
    public function setRememberToken($value)
    {
        $this->gf_remember_token = $value;
    }
    
    /**
     * Get the column name for the "remember me" token.
     *
     * @return string
     */
    public function getRememberTokenName()
    {
        return 'gf_remember_token';
    }
    
    /**
     * Get the e-mail address where password reminders are sent.
     *
     * @return string
     */
    public function getReminderEmail()
    {
        return $this->gf_email;
    }
}

登录。刀身php

<form method="POST" action="{{ asset('/users') }}">
@csrf
  <div class="form-group">
    <input type="email" class="form-control" name="input-email" id="input-email" placeholder="Email" required>
  </div>
  <div class="form-group">
    <input type="password" class="form-control" name="input-password" id="input-password" placeholder="Password" required>
  </div>
  <button type="submit" class="btn btn-primary">LOGIN</button>
</form>

config/auth。php:

<?php

return [


    'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],


    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
        ],
        
    ],

    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\NewUser::class
        ],

        //'users' => [
        //     'driver' => 'database',
        //     'table' => 'users',
        // ],
    ],

    'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
        ],
    ],

];

在此更改后,我做了命令php artisan配置:缓存php artisan事件:清除

翁和颂
2023-03-14

config/auth。php:

return [

    'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],

    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
        ],

        'gfuser' => [
            'driver' => 'session',
            'provider' => 'gfuser',
        ],
    ],

    'providers' => [
        'gfuser' => [
            'driver' => 'eloquent',
            'model' => App\GFUsers::class
        ],
    ],

    'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
        ],
    ],

];

登录控制器

Auth::guard('gfuser')->login($user); //array data with username and password
OR
if (Auth::guard('gfuser')->attempt(['username' => $username, 'password' => $password]) {//Redirect to dashboard}
 类似资料:
  • 我一直在尝试通过spring security验证我的服务。为此,我使用过滤器作为 这是我一直在使用的安全配置:在此配置中,我通过身份验证过滤所有请求并允许所有请求。对于身份验证,我有登录页面。在登录表单中,我分别使用“用户名”表示电子邮件和“密码”表示属性名称的密码。 这是我的程序结构 为了实现UserDEtailService,我做了以下工作 这是我覆盖的UserDetailsService,

  • 问题内容: 我有一个网站,有一个用户系统。我想将wordpress的用户系统集成到该网站的系统中,但是我仍然想使用该网站的注册/登录页面。我不希望任何人都能使用Wordpress的登录或注册表格进行登录或注册。相反,当他们尝试访问Wordpress中的登录/注册页面时,我希望这些页面将它们重定向到我自己的登录/注册页面。 有什么办法吗?我已经尝试过Google,但是我所能找到的只是在用户登录或注册

  • 而且,再一次,即使键入正确的凭据,正如我在“userDetailsService”方法中指定的那样,我也无法登录,但这次我终于可以在控制台上看到错误消息: 显然我走了,但没有离开这个地方,因为现在我不知道我的代码有什么问题...

  • 我正在为注册和登录过程集成Azure Active目录B2C。默认情况下,当用户单击登录按钮时,它必须将用户重定向到不同的域(microsoftonline.com),以便注册和登录页面的URL采用以下格式: https://login.microsoftonline.com/te/tenant-name.onmicrosoft.com/b2c_1_signupsignin1/oauth2/v2.

  • 有人知道如何使用firebase或任何其他服务为flutter拥有自定义用户名和密码登录吗?我不是在说电子邮件验证。用户只需用密码和登录名创建用户名。

  • 我正在尝试开发一个定制的JAAS登录模块,它使用一个令牌并从不同的来源获取用户数据。它应该作为wildfly 8.2.1 final的身份验证领域。我有一个测试servlet,我想在其中进行身份验证,以便检查注入EJB的允许角色。 这个网站的测试:http://www.radcortez.com/custom-principal-and-loginmodule-for-wildfly/事实上,我甚