<?php namespace App\Http\Controllers;
use Hash;
use Config;
use Validator;
use Firebase\JWT\JWT;
use Illuminate\Http\Request;
use GuzzleHttp;
use GuzzleHttp\Subscriber\Oauth\Oauth1;
use App\User;
class AuthController extends Controller {
/**
* Generate JSON Web Token.
*/
protected function createToken($user)
{
$payload = [
'sub' => $user->id,
'iat' => time(),
'exp' => time() + (2 * 7 * 24 * 60 * 60)
];
return JWT::encode($payload, Config::get('app.token_secret'));
}
/**
* Log in with Email and Password.
*/
public function login(Request $request)
{
$email = $request->input('email');
$password = $request->input('password');
$user = User::where('email', '=', $email)->first();
if (!$user)
{
return response()->json(['message' => 'Wrong email and/or password'], 401);
}
if (Hash::check($password, $user->password))
{
unset($user->password);
return response()->json(['token' => $this->createToken($user)]);
}
else
{
return response()->json(['message' => 'Wrong email and/or password'], 401);
}
}
/**
* Create Email and Password Account.
*/
public function signup(Request $request)
{
$validator = Validator::make($request->all(), [
'displayName' => 'required',
'email' => 'required|email|unique:users,email',
'password' => 'required'
]);
if ($validator->fails()) {
return response()->json(['message' => $validator->messages()], 400);
}
$user = new User;
$user->displayName = $request->input('displayName');
$user->email = $request->input('email');
$user->password = Hash::make($request->input('password'));
$user->save();
return response()->json(['token' => $this->createToken($user)]);
}Üstteki kod login/register için frontendden gelen data ile register/login olma ile ilgili ve Laravel framework kullanılarak yazılmış. Bunu pure php ye çevirmek istiyorum fakat php bilgim sınırlı. Registerın bir kısmını yaptım fakat login ve JWT olayı hakkında bilgim yok. Composer kullanarak JWT eklentisi yükledim fakat nasıl kullanılacağı hakkında fikrim yok. Şuana kadar geldiğim kısım aşağıda.
<?php
require_once __DIR__ . '/vendor/autoload.php';
$klein = new \Klein\Klein();
use \Firebase\JWT\JWT;
$key = "example_key";
$token = array(
"iss" => "http://example.org",
"aud" => "http://example.com",
"iat" => 1356999524,
"nbf" => 1357000000
);
/**
* IMPORTANT:
* You must specify supported algorithms for your application. See
* https://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-40
* for a list of spec-compliant algorithms.
*/
$jwt = JWT::encode($token, $key);
$decoded = JWT::decode($jwt, $key, array('HS256'));
$klein->respond('POST', '/auth/login', function($request, $response) {
$data = json_decode($req);
$email = $data->email;
$gecPassword = $data->password;
});
$klein->respond('POST', '/auth/register', function($request, $response){
$req = $request->body();
$data = json_decode($req);
$displayName = $data->displayName;
$email = $data->email;
$gecPassword = $data->password;
$password = password_hash($gecPassword, PASSWORD_DEFAULT);
$sql = "INSERT INTO users (`displayName`, `email`, `password`) VALUES (:displayName, :email, :password)";
$dbCon = getConnection();
$stmt = $dbCon->prepare($sql);
$stmt->bindParam(':displayName', $displayName);
$stmt->bindParam(':email', $email);
$stmt->bindParam(':password', $password);
$stmt->execute();
});
$klein->dispatch();