简体   繁体   English

Laravel MultiAuth MD5和主键字符串

[英]Laravel multiauth md5 and primary key string

currently i have 1 project need to use extend mysql database which has a lot of data and password is md5 encrypted and the MEMBER_ID(primary key) is string like this 目前我有1个项目需要使用具有大量数据的扩展mysql数据库,并且密码是md5加密的,而MEMBER_ID(primary key)是这样的字符串

5e3bb0bdb70e4f139c132cc32daace0e 5e3bb0bdb70e4f139c132cc32daace0e

the password field name PASSWORD and the primary key name MEMBER_ID 密码字段名称PASSWORD和主键名称MEMBER_ID

so i set the eloquent model like this 所以我这样设定雄辩的模型

<?php

namespace App\Models;

use Auth;
use Illuminate\Auth\Authenticatable;
use Illuminate\Foundation\Auth\Access\Authorizable;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract;

class Member extends BaseModels implements AuthenticatableContract, AuthorizableContract
{
    use Authenticatable, Authorizable;

    protected $connection = 'mysql_db2';

    protected $table = 'tb_member';

    protected $primaryKey = 'MEMBER_ID';

    protected $fillable = [];

    public $incrementing = false;

    protected $hidden = ['PASSWORD'];

    public function getAuthIdentifier() {
        return $this->MEMBER_ID;
    }

    public function setPASSWORDAttribute($value) {
        $this->attributes['PASSWORD'] = static::encryptPassword($value);
    }

    public function setPassword($password) {dd('set');
        $this->PASSWORD = static::encryptPassword($password);
    }

    public function getAuthPassword() {dd('get');
        return $this->PASSWORD;
    }

    public static function encryptPassword($password) {
        return md5($password);
    }

    public function checkLogin($username, $password) {
        if ($this->USERNAME == $username && $this->PASSWORD == static::encryptPassword($password)) {
            return true;
        } else {
            return false;
        }
    }
}

i search around and found some post mention to add the getAuthPassword() and setPassword() method, but i die dump there it also pass, so i think is deprecated in laravel 5.2? 我四处搜索,发现一些帖子提到要添加getAuthPassword()setPassword()方法,但是我在那里通过了转储,所以我认为在laravel 5.2中已弃用了吗?

and here is my controller 这是我的控制器

<?php

namespace App\Http\Controllers\Auth;

use App\Models\Member;
use Validator;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ThrottlesLogins;
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;
use Illuminate\Http\Request;
use Auth;

class MemberController extends Controller {
    use AuthenticatesAndRegistersUsers, ThrottlesLogins;

    public function login(Request $request) {
        $username = $request->get('username');
        $password = $request->get('password');

        try {
            $member = Member::where('USERNAME', '=', $username)->first();
            dd(Auth::guard('member')->attempt([
                'USERNAME' => $username,
                'PASSWORD' => $password
            ]));
            if ($member) {
                if ($member->checkLogin($username, $password)) {

                    Auth::guard('member')->login($member);
                    if (Auth::guard('member')->check()) {
//                        dd(Auth::guard('member')->check());
                        return redirect()->route('frontend.index');
                    } else {
                        return redirect()->route('frontend.index')->withErrors();
                    }
                } else {
                    return 'Incorrect password';
                }
            } else {
                return 'Username not found';
            }
            $d = new Member();
            $d->PASSWORD = 123456;

            $credentials = [
                'USERNAME' => $username,
                'PASSWORD' => $password
            ];
            if (Auth::guard('member')->attempt($credentials)) {
                return 'successfully login';
            } else {
                return 'unable to login';
            }
            return 'hehe';
//            dd($username, $password);
        } catch (\Exception $e) {
            dd('FILE: ' . $e->getfile() . 'LINE: ' . $e->getLine() . '<br />' . $e->getMessage());
        }
    }
}

the Auth::guard('member')->attempt() always return false Auth :: guard('member')-> attempt()始终返回false

the Auth::guard('member')->login($member) always return null Auth :: guard('member')-> login($ member)始终返回null

Auth::guard('member')->check() return true when the page not refresh, but once refresh(or go another route/page) the Auth::guard('member')->check() will then return false 当页面未刷新时, Auth :: guard('member')-> check()返回true,但是一旦刷新(或走另一条路线/页面),则Auth :: guard('member')-> check()就会返回假

i cannot change the password encrypt method, i cannot add a auto increment field or edit the primary key to the member table because another website maintainer say it might cause his JAVA application error, so any idea without changing any table structure? 我无法更改密码加密方法,无法添加自动递增字段或编辑成员表的主键,因为另一个网站维护人员说这可能会导致其JAVA应用程序错误,因此在不更改任何表结构的情况下有什么想法?

UPDATE: 更新:

i found some article http://laravel.io/forum/11-04-2014-laravel-5-how-do-i-create-a-custom-auth-in-laravel-5 我发现了一些文章http://laravel.io/forum/11-04-2014-laravel-5-how-do-i-create-a-custom-auth-in-laravel-5

i did the custom auth and finally Auth::guard('member')->attempt return true 我做了自定义身份验证,最后是Auth :: guard('member')-> attempt返回true

but once the page refresh or go another page/route, the Auth::guard('member')->check() return false again 但是一旦页面刷新或转到其他页面/路由,则Auth :: guard('member')-> check()再次返回false

UPDATE 2: 更新2:

i try dump dd(\\Session::all()) at index and i found the session get cleared, but when i try dump dd(\\Session::all()) after Auth::guard('member')->attempt , the session show 我尝试在索引处转储dd(\\ Session :: all()) ,发现会话已清除,但是当我在Auth :: guard('member')->之后尝试转储dd(\\ Session :: all())时 尝试 ,会话显示

array:1 [▼
  "login_member_59ba36addc2b2f9401580f014c7f58ea4e30989d" => "5e3bb0bdb70e4f139c132cc32daace0e"
]

why is the session get cleared? 为什么要清除会话?

i found the solution, is because session not started 我找到了解决方案,是因为会话未开始

https://laracasts.com/discuss/channels/laravel/auth-session-killed-after-redirect-laravel-52 https://laracasts.com/discuss/channels/laravel/auth-session-killed-after-redirect-laravel-52

app/Http/routes.php app / Http / routes.php

//Frontend route
Route::group(array('namespace' => 'Frontend', 'middleware' => ['web']), function() {
    Route::get('/', ['as' => 'frontend.index', 'uses' => 'IndexController@index']);
});

app/Http/kernel.php app / Http / kernel.php

<?php

namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel
{
    /**
     * The application's global HTTP middleware stack.
     *
     * These middleware are run during every request to your application.
     *
     * @var array
     */
    protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
    ];

    /**
     * The application's route middleware groups.
     *
     * @var array
     */
    protected $middlewareGroups = [
        'member' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
        ],

        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        ],

        'api' => [
            'throttle:60,1',
        ],
    ];

    /**
     * The application's route middleware.
     *
     * These middleware may be assigned to groups or used individually.
     *
     * @var array
     */
    protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'web' => \App\Http\Middleware\Web::class,
    ];
}

app/Http/Middleware/Web.php app / Http /中间件/Web.php

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;

class Web
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @param  string|null  $guard
     * @return mixed
     */
    public function handle($request, Closure $next, $guard = null)
    {
        return $next($request);
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM