[英]Custom login and registration with auth laravel 5.7
我正在嘗試使用Laravel 5.7創建第一個項目。
在這個項目中,我有三個不同的區域,三個不同的登錄(例如,用戶登錄,管理員登錄,技術人員登錄)。
現在,我想自定義第一次登錄(url、html、輸入、類、db 表、db 列 ecc...)但我不知道該怎么做。
首次登錄的網址是website.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,
)
我已經搜索了很多,並根據我找到的信息,我嘗試這樣做:
配置/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';
}
GFUsers.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;
}
}
登錄名.blade.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 . 我可以做什么來注冊?
配置/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}
經過長時間的研究,我找到了我的解決方案。 我希望這可以幫助別人。
我已經自定義了:表中的 id、用戶名、密碼和記住令牌以及文件 User.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');
新登錄控制器.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');
}
}
新用戶.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;
}
}
登錄名.blade.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>
配置/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 config:cache
和php artisan event:clear
。
最好不要為用戶、管理員和技術人員制作不同的表格。 他們都應該是用戶。 在一張表中,只是具有不同的屬性(例如 - 角色、狀態、is_admin、is_user...)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.