2016-05-06 20 views
1

私はlaravelでapiを作っています。私はすでに構築されており、ライブであるデータベースを使用しています。そのシステムはmd5をsalt値で使用します。 私はそのシステムの認証をしたいと思います。どうすればいいのですか? 私のソースコード:コアPHPでlaravelの認証

public function authenticate(Request $request) 
{ 
$email = $request->input('email'); 
$password = md5('testpassword' . 'saltvaluehere'); 
try { 
     // 

     // attempt to verify the credentials and create a token for the user 
     if (!$token = JWTAuth::attempt([ 
      'email' => $email, 
      'pass' => $password 
     ]) 
     ) { 


      return response()->json(['error' => 'invalid_credentials'], 401); 
     } 
    } catch (JWTException $e) { 
     // something went wrong whilst attempting to encode the token 
     return response()->json(['error' => 'could_not_create_token'], 500); 
    } 

    // all good so return the token 
    return response()->json(compact('token')); 
} 

これらの認証はによって行われます。コードの上

$getpass  = $mydb->CleanString($_POST['password']); 
$getusername = $mydb->CleanString($_POST['username']); 
$dbpass = $mydb->md5_decrypt($mydb->getValue("pass","tbl_admin","username = '".$getusername."'"), SECRETPASSWORD); 

    if($dbpass == $getpass){ 
return 'success full login'; 
} 

はハッシュの同じ値を与えるdoesnotので、私はシステムに認証することができるというわけではありません。

編集:私はデータベースに合わせたパスワードを持っているが、トークンが生成されていないbieng

。ここ

は私のコードです:

public function authenticate(Request $request) 
{ 

    $email = $request->input('email'); 
    $password = $request->input('password'); 
    $password = md5($password); 



    try { 
     // 

     // attempt to verify the credentials and create a token for the user 
     if (!$token = JWTAuth::attempt([ 
      'email' => $email, 
      'password' => $password 
     ]) 
     ){ 

      //return response()->json(compact('token')); 
      return response()->json(['error' => 'invalid_credentials','_data'=>[$password,$email]], 401); 
     } 
    } catch (JWTException $e) { 
     // something went wrong whilst attempting to encode the token 
     return response()->json(['error' => 'could_not_create_token'], 500); 
    } 

    // all good so return the token 
    return response()->json(compact('token')); 
} 

誰が私にトークン生成されていないと、なぜそれが無効credintialsを言っている理由を伝えることができます。それは暗号化された形式のデータベースのパスワードと電子メールを示しています。

答えて

0

これは私が処理した状況であり、私は概念証明として与えるためのコードを持っています。

本来、私は古いパスワードのための別のパスワードフィールドを追加しました。私は、私の場合には、古いパスワードデータのJSONオブジェクトにpassword_legacyセットを持つユーザーをインポート:
{ 'hasher' : 'algo', 'hash' : '#####', 'salt' : 'salt here' }

その後passwordがnullだった場合、認証がpassword_legacyをチェックして、私は修正されたユーザ、サービスプロバイダを使用していました。その後、イルミネイトHasherコントラクトをベースとして使用し、クラスの新しいインスタンス(hasherプロパティを使用して動的に作成しました。たとえばapp\Services\Hashing\AlgoHasher)を使用して、デフォルトシステムの代わりに認証に使用しました。

成功した場合は、パスワードと設定していないpassword_legacyを設定しています。成功した場合、パスワードはbcryptです。これにより、bcryptが提供するより高いセキュリティー標準にパスワードがアップグレードされました。新しいフィールドの

移行コード:
https://github.com/infinity-next/infinity-next/blob/ccb01c753bd5cedd75e03ffe562f389d690de585/database/migrations_0_3_0/2015_06_12_181054_password_legacy.php

修飾ユーザプロバイダ:Vichanため
https://github.com/infinity-next/infinity-next/blob/ccb01c753bd5cedd75e03ffe562f389d690de585/app/Providers/EloquentUserProvider.php

ハッシャ契約(MD5 +塩):
https://github.com/infinity-next/infinity-next/blob/ccb01c753bd5cedd75e03ffe562f389d690de585/app/Services/Hashing/VichanHasher.php

当該ユーザコード:
https://github.com/infinity-next/infinity-next/blob/ccb01c753bd5cedd75e03ffe562f389d690de585/app/User.php#L124-L165

希望すると助かります!