【问题标题】:laravel 7 authentication not working with jenssegers-mongodblaravel 7 身份验证不适用于 jensegers-mongodb
【发布时间】:2020-05-29 04:29:33
【问题描述】:
<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Model\Company;
use App\Model\User;
use Crypt;
use Hash;
use Illuminate\Support\Facades\Auth;


class LoginController extends Controller
{
    public function login(Request $request) {
        $email = $request->input('email');
        $password = $request->input('password');

        $user = User::where('email', $email)->first();
        if ($user) {
            if (! $user->is_verified) {
                return response()->json(['success' => false,'message' => 'User not verified.']);
            }
            if (Auth::attempt(['email' => $email, 'password' => $password])) {
                return response()->json(['success' => true,'message' => 'Logged in successfully.']);
            }
            return response()->json(['success' => false,'message' => 'User not found.']);

        } else {
            return response()->json(['success' => false,'message' => 'User not found.']);
        }
    }
}
<?php

namespace App\Model;

use Illuminate\Database\Eloquent\Model;
use Jenssegers\Mongodb\Eloquent\Model as Eloquent;

use Illuminate\Notifications\Notifiable;
use Jenssegers\Mongodb\Auth\User as Authenticatable;

class User extends Authenticatable 
{
    use Notifiable;

    protected $primaryKey = '_id';

    protected $connection = 'mongodb';
    protected $collection = 'users';
    
    protected $fillable = [
        'name', 'email','password','user_type', 'company_id' , 'is_verified', 'is_active','created_at'
    ];

    public function getAuthIdentifierName(){

    }
    public function getAuthIdentifier(){

    }
    public function getAuthPassword(){

    }
    public function getRememberToken(){

    }
    public function setRememberToken($value){

    }
    public function getRememberTokenName(){
        
    }
}
<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Model\Company;
use App\Model\User;
use Illuminate\Support\Facades\Hash;
use Auth;
use Mail;
use Crypt;

class RegisterController extends Controller
{
    public function userSignup(Request $request) {

        $name = $request->input('name');
        $email = $request->input('email');
        $password = Hash::make($request->input('password'));

        $user = User::where('email', $email)->first();
        if ($user) {
            return response()->json(['success' => false,'message' => 'User already exists.']);
        } else {
            $this->userSignUpProcess($name, $email, $password);
            return response()->json(['success' => true,'message' => 'User signed up successfully.Verify email to login']);
        }
    }

    private function userSignUpProcess($name, $email, $password, $company_id=0){
        $user = User::create([
            'name' =>$name,
            'email' => $email,
            'password' => $password,
            'company_id' => $company_id,
            'is_verified' => false,
            'is_active' => true
        ]);
        $hash_user_id = Crypt::encryptString($user->_id);
        Mail::send('mails.verify-account', ['hash_user_id' => $user->_id], function ($mail) use ($user) {
            $mail->from('no-reply@sbfd.com', config('app.name'));
            $mail->to($user->email)->subject('Verify Your account');
        });
    }
}

Auth::attempt(['email' =&gt; $email, 'password' =&gt; $password]) returning false。 Hash::check($password, $user-&gt;password); 这是返回 true。 使用 laravel 7 身份验证不适用于 MongoDB。对于 MongoDB,我使用 jenssegers/mongodb 4.0.0-alpha.1。但是现在我在 Laravel 控制器中创建登录身份验证时遇到了错误。

请任何人帮忙。

【问题讨论】:

    标签: php laravel mongodb laravel-7 php-7.3


    【解决方案1】:

    app/Models/User.php

    <?php
    
    namespace App\Models;
    
    use Jenssegers\Mongodb\Eloquent\Model as Eloquent;
    use Illuminate\Auth\Authenticatable as AuthenticatableTrait;
    use Illuminate\Contracts\Auth\Authenticatable;
    
    class User extends Eloquent implements Authenticatable
    {
        use AuthenticatableTrait;
    
        protected $connection = 'mongodb';
        protected $collection = 'users';
    
        /**
         * The attributes that are mass assignable.
         *
         * @var array
         */
        protected $fillable = [
            'name', 'email', 'password'
        ];
    
        /**
         * The attributes that should be hidden for arrays.
         *
         * @var array
         */
        protected $hidden = [
            'password', 'remember_token'
        ];
    
        /**
         * The attributes that should be cast to native types.
         *
         * @var array
         */
        protected $casts = [
            'email_verified_at' => 'datetime'
        ];
    }
    
    

    config/database.php

    <?php
    
    return [
    
        'default' => env('DB_CONNECTION', 'mongodb'),
    
        'connections' => [
    
            ********************************
    
            'mongodb' => [
                'driver' => 'mongodb',
                'dsn' => env('DB_URI', 'mongodb+srv://username:password@eventcluster.i0lim.mongodb.net/myFirstDatabase?retryWrites=true&w=majority'),
                'database' => 'my_management',
            ],
    
        ],
    
        ********************************
    ];
    
    

    app/Http/Controllers/Auth/LoginController.php

    <?php
    
    namespace App\Http\Controllers\Auth;
    
    use App\Http\Controllers\Controller;
    use App\Providers\RouteServiceProvider;
    use Illuminate\Foundation\Auth\AuthenticatesUsers;
    
    class LoginController extends Controller
    {
        /*
        |--------------------------------------------------------------------------
        | Login Controller
        |--------------------------------------------------------------------------
        |
        | This controller handles authenticating users for the application and
        | redirecting them to your home screen. The controller uses a trait
        | to conveniently provide its functionality to your applications.
        |
        */
    
        use AuthenticatesUsers;
    
        /**
         * Where to redirect users after login.
         *
         * @var string
         */
        protected $redirectTo = RouteServiceProvider::HOME;
    
        /**
         * Create a new controller instance.
         *
         * @return void
         */
        public function __construct()
        {
            $this->middleware('guest')->except('logout');
        }
    }
    

    app/Http/Controllers/Auth/RegisterController.php

    <?php
    
    namespace App\Http\Controllers\Auth;
    
    use App\Http\Controllers\Controller;
    use App\Providers\RouteServiceProvider;
    use App\Models\User;
    use Illuminate\Foundation\Auth\RegistersUsers;
    use Illuminate\Support\Facades\Hash;
    use Illuminate\Support\Facades\Validator;
    use Illuminate\Support\Str;
    
    class RegisterController extends Controller
    {
        /*
        |--------------------------------------------------------------------------
        | Register Controller
        |--------------------------------------------------------------------------
        |
        | This controller handles the registration of new users as well as their
        | validation and creation. By default this controller uses a trait to
        | provide this functionality without requiring any additional code.
        |
        */
    
        use RegistersUsers;
    
        /**
         * Where to redirect users after registration.
         *
         * @var string
         */
        protected $redirectTo = RouteServiceProvider::HOME;
    
        /**
         * Create a new controller instance.
         *
         * @return void
         */
        public function __construct()
        {
            $this->middleware('guest');
        }
    
        /**
         * Get a validator for an incoming registration request.
         *
         * @param  array  $data
         * @return \Illuminate\Contracts\Validation\Validator
         */
        protected function validator(array $data)
        {
            return Validator::make($data, [
                'name' => ['required', 'string', 'max:255'],
                'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
                'password' => ['required', 'string', 'min:8', 'confirmed'],
            ]);
        }
    
        /**
         * Create a new user instance after a valid registration.
         *
         * @param  array  $data
         * @return \App\Models\User
         */
        protected function create(array $data)
        {
            return User::create([
                'name' => $data['name'],
                'email' => $data['email'],
                'password' => Hash::make($data['password']),
                'api_token' => Str::random(80),
            ]);
        }
    }
    

    更改User.php 和database.php 之后。

    RegisterController.php 和 LoginController.php 文件原样,由 laravel 提供。

    我认为您不需要更改任何其他文件。

    您可以使用 NoSQLBooster for MongoDB 和 MongoDBCompass 访问 MongoDB 数据库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-04
      • 2017-03-15
      • 2016-05-31
      • 2021-01-11
      • 1970-01-01
      • 2016-10-22
      • 2017-10-10
      相关资源
      最近更新 更多